Não tenho certeza se esta pergunta deve ser feita aqui ou em reverseengineering.stackexchange.com
Citações da wikipedia :
No processador 8086, a tabela de interrupção é chamada IVT (tabela de vetores de interrupção). O IVT sempre reside no mesmo local na memória, variando de 0x0000 a 0x03ff, e consiste em 256 ponteiros distantes no modo real de quatro bytes (256 × 4 = 1024 bytes de memória).
Isto é o que eu encontro no monitor qemu:
(qemu) xp/128xw 0
0000000000000000: 0xf000ff53 0xf000ff53 0xf000e2c3 0xf000ff53
0000000000000010: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
0000000000000020: 0xf000fea5 0xf000e987 0xf000d62c 0xf000d62c
0000000000000030: 0xf000d62c 0xf000d62c 0xf000ef57 0xf000d62c
0000000000000040: 0xc0005526 0xf000f84d 0xf000f841 0xf000e3fe
0000000000000050: 0xf000e739 0xf000f859 0xf000e82e 0xf000efd2
0000000000000060: 0xf000d648 0xf000e6f2 0xf000fe6e 0xf000ff53
0000000000000070: 0xf000ff53 0xf000ff53 0xf0006aa4 0xc0008930
0000000000000080: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
0000000000000090: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
00000000000000a0: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
00000000000000b0: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
00000000000000c0: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
00000000000000d0: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
00000000000000e0: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
00000000000000f0: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
0000000000000100: 0xf000ec59 0xf000ff53 0xf000ff53 0xc0006730
0000000000000110: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
0000000000000120: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
0000000000000130: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
0000000000000140: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
0000000000000150: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
0000000000000160: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
0000000000000170: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
0000000000000180: 0x00000000 0x00000000 0x00000000 0x00000000
0000000000000190: 0x00000000 0x00000000 0x00000000 0xf000ff53
00000000000001a0: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
00000000000001b0: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
00000000000001c0: 0xf000d611 0xf000ec4e 0xf000ec4e 0xf000ec4e
00000000000001d0: 0xf000d61a 0xf000d623 0xf000d608 0xf000ec4e
00000000000001e0: 0xf000ff53 0x00000000 0xf000ff53 0xf000ff53
00000000000001f0: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
Não sei o que fazer com esses valores. Não se parece com uma tabela de descritor de interrupção (a desreferenciação desses valores fornece todos os nulos). Então, o que eu estou realmente vendo aqui?
A arquitetura original do processador 8086 (implementada como Modo Real nos processadores 80286+) não tem relevância para o Linux, que opera no Modo Protegido. Não há tabela de vetor de interrupção no endereço físico 0; em vez disso, é usada uma tabela de descritor de interrupção que contém descritores de interrupção. O IDT pode estar localizado em qualquer lugar da memória.
O kernel do Linux obtém um mapa de memória física do firmware (BIOS ou EFI), que informa quais quadros de página de memória física são utilizáveis e quais são reservados ou ausentes. O intervalo de quadros de página utilizáveis não é contíguo, mas normalmente possui enormes buracos. Tradicionalmente, o kernel do Linux x86 pulou o início da memória física, mesmo que esteja marcada como utilizável. Portanto, o endereço físico 0 não é usado pelo kernel do Linux.
fonte
53 ff
revela que essa é provavelmente uma tabela de vetores de interrupção no Modo Real 8086 configurada pelo firmware ou pelo carregador de inicialização.Dumping memory
Aqui está uma maneira alternativa de despejar o conteúdo da memória dentro do sistema versus fazer isso externamente:
Análise
A parte superior acima de 000c0000 pode estar relacionada ao carregador de inicialização. Por que eu suspeitaria disso? O código 55aah no local
Referência: Assinatura de Inicialização - BIOS000c0000
normalmente pode ser uma marca na memória de coisas como um gatilho para o BIOS executar um carregador de inicialização secundário.No entanto, dado que esse 55aah ocorre na faixa de c0000h-effffh, é mais provável que essa parte seja o PNP Expansion Header:
Referência: especificação de inicialização do BIOS53ff ...
Quanto aos dados 53ffh que estão no início. Não está claro para mim o que realmente é. Pesquisando mais, é provável que algo que o kernel do Linux tenha escrito lá depois que o MBR do BIOS foi transferido para o kernel do Linux para inicializar.
Indo mais longe, consegui encontrar este parágrafo em um trabalho de pesquisa intitulado: Injeção de código malicioso via / dev / mem :
Referências
fonte