Um toolkit agnóstico para amd64 é possível?
Tenho pensado em escrever algo do zero para mexer com alguns internals do amd64.
A ideia é ter uma base simples para lidar com estruturas principais do x86-64, de um jeito que seja fácil de usar e reaproveitar em outros projetos.
Um ponto que tem ficado na minha cabeça é o quanto esse tipo de coisa acaba ficando dependente demais do ambiente e até do compilador. No Windows, por exemplo, é fácil acabar em um lock-in absurdo no MSVC, com headers específicos ou a formas muito particulares de acessar certas estruturas.
Quero tentar ultrapassar essa barreira. (Ou ao menos tentar, talvez eu tenha que usar alguns intrisics, alguns ´#ifndef´ mesmo. Mas funcionando em ambientes unix-like e Windows, já seria hiper-interessante)
A ideia seria construir algo mais reutilizável, que foque primeiro na arquitetura em si, e não no sistema operacional. Algo que me permita iterar sobre essas estruturas, entender melhor como elas funcionam e usar isso como base para outras coisas no futuro.
Um começo disso foi este repositório: amd64utils. Ele seria o início dessa ideia. Mas, em testes locais, foi bem difícil conciliar a proposta de ser algo realmente agnóstico a sistema operacional.
Como desafio, quero poder iterar, manipular ou abstrair:
- Paginação
- Segmentação
- Interrupções
- System-calls
- Tabelas como GDT, LDT, TSS
- Gates
- CPUID (Listar feature flags por exemplo com enums )
Agora, com uma cabeça nova sobre o problema, talvez eu tente de novo, mirando em tornar isso realmente possível, ou pelo menos chegar muito perto disso de um jeito mais clean.
O que eu provavelmente vou usar como base para estudar vai ser o Open Security Training 2. Já fiz o curso deles sobre internals de x86-64, achei muito bom, recomendo muito! E, claro, também o indispensável manual da Intel (O manual da AMD também?).