Je ne sais pas si cette question doit aller ici ou dans reverseengineering.stackexchange.com
Citant de wikipedia :
Dans le processeur 8086, la table d'interruption est appelée IVT (table de vecteur d'interruption). L'IVT réside toujours au même emplacement dans la mémoire, allant de 0x0000 à 0x03ff, et se compose de 256 pointeurs éloignés en mode réel à quatre octets (256 × 4 = 1024 octets de mémoire).
C'est ce que je trouve dans le moniteur 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
Je ne sais pas quoi faire de ces valeurs. Il ne ressemble pas à une table de descripteurs d'interruption (le déréférencement de ces valeurs donne tous les nulls). Alors qu'est-ce que je regarde ici?
L'architecture du processeur 8086 d'origine (implémentée en mode réel dans les processeurs 80286+) n'a aucune pertinence pour Linux, qui fonctionne en mode protégé. Il n'y a pas de table de vecteurs d'interruption à l'adresse physique 0, mais une table de descripteurs d'interruption contenant des descripteurs d'interruption est utilisée. L'IDT peut être situé n'importe où dans la mémoire.
Le noyau Linux obtient une carte de mémoire physique du micrologiciel (BIOS ou EFI) qui indique quels cadres de page de mémoire physique sont utilisables et lesquels sont réservés ou non présents. La plage de cadres de page utilisables n'est pas contiguë, mais comporte généralement d'énormes trous. Traditionnellement, le noyau Linux x86 a ignoré le début de la mémoire physique, même si elle est marquée comme utilisable. Ainsi, l'adresse physique 0 n'est pas utilisée par le noyau Linux.
la source
53 ff
révèle qu'il s'agit très probablement d'une table de vecteurs d'interruption en mode réel 8086 configurée par le micrologiciel ou un chargeur de démarrage.Mémoire de vidage
Voici une autre façon de vider le contenu de la mémoire à l'intérieur du système par rapport à le faire en externe:
Une analyse
La partie supérieure au-dessus de 000c0000 pourrait être liée au chargeur de démarrage. Pourquoi devrais-je soupçonner cela? Le code 55aah à l'emplacement
Référence: Boot Signature - BIOS000c0000
peut généralement être une marque en mémoire pour des choses telles qu'un déclencheur pour que le BIOS exécute un chargeur de démarrage secondaire.Cependant, étant donné que 55aah se produit dans la plage c0000h-effffh, il est plus probable que cette partie soit l'en-tête d'extension PNP:
Référence: spécification de démarrage du BIOS53ff ...
Quant aux données 53ffh qui sont au début. Pour moi, ce n'est pas clair. En poursuivant ses recherches, il est probable que le noyau Linux y ait écrit après le chargement du MBR par le BIOS remis au noyau Linux pour démarrer.
En creusant davantage, j'ai pu trouver ce paragraphe dans un document de recherche intitulé: Injection de code malveillant via / dev / mem :
Les références
la source