No estoy seguro de si esta pregunta debería ir aquí o en reverseengineering.stackexchange.com
Citando de wikipedia :
En el procesador 8086, la tabla de interrupción se llama IVT (tabla de vector de interrupción). El IVT siempre reside en la misma ubicación en la memoria, que va de 0x0000 a 0x03ff, y consta de 256 punteros lejanos en modo real de cuatro bytes (256 × 4 = 1024 bytes de memoria).
Esto es lo que encuentro en el 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
No estoy seguro de qué hacer con esos valores. No se parece a una tabla de descriptores de interrupciones (la desreferenciación de esos valores da todos los valores nulos). Entonces, ¿qué estoy mirando realmente aquí?
La arquitectura del procesador 8086 original (implementada como modo real en procesadores 80286+) no tiene relevancia para Linux, que opera en modo protegido. No hay una tabla de vectores de interrupción en la dirección física 0, en su lugar se utiliza una tabla de descriptores de interrupción que contiene descriptores de interrupción. El IDT puede ubicarse en cualquier lugar de la memoria.
El kernel de Linux obtiene un mapa de memoria física del firmware (BIOS o EFI) que indica qué marcos de página de memoria física son utilizables y cuáles están reservados o no. El rango de marcos de página utilizables no es contiguo, pero generalmente tiene enormes agujeros. Tradicionalmente, el núcleo Linux x86 ha omitido el inicio de la memoria física, incluso si está marcado como utilizable. Por lo tanto, la dirección física 0 no es utilizada por el kernel de Linux.
fuente
53 ff
revela que es muy probable que se trate de una tabla de vectores de interrupción en modo real 8086 configurada por el firmware o un cargador de arranque.Volcar la memoria
Aquí hay una forma alternativa de volcar el contenido de la memoria dentro del sistema frente a tener que hacerlo externamente:
Análisis
La parte superior por encima de 000c0000 podría estar relacionada con el gestor de arranque. ¿Por qué sospecharía esto? El código 55aah en la ubicación
Referencia: Boot Signature - BIOS000c0000
generalmente puede ser una marca en la memoria para cosas como un disparador para que el BIOS ejecute un cargador de arranque secundario.Sin embargo, dado que este 55aah ocurre en el rango c0000h-effffh, es más probable que esta porción sea el encabezado de expansión PNP:
Referencia: especificación de arranque del BIOS53ff ...
En cuanto a los datos de 53ffh que están al principio. No me queda claro qué es eso en realidad. Investigando más a fondo es probable que sea algo que el kernel de Linux escribió allí después de que la carga de arranque del BIOS del MBR se transfiriera al kernel de Linux para arrancar.
Excavando más, pude encontrar este párrafo de un trabajo de investigación titulado: Inyección de código malicioso a través de / dev / mem :
Referencias
fuente