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?).