Saya tidak yakin apakah pertanyaan ini harus masuk ke sini atau di reverseengineering.stackexchange.com
Mengutip dari wikipedia :
Dalam prosesor 8086, tabel interrupt disebut IVT (interrupt vector table). IVT selalu berada di lokasi yang sama dalam memori, mulai dari 0x0000 hingga 0x03ff, dan terdiri dari 256 byte mode nyata pointer jauh (256 × 4 = 1024 byte memori).
Ini yang saya temukan di 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
Saya tidak yakin apa yang membuat nilai-nilai itu. Itu tidak terlihat seperti tabel deskriptor interupsi (mendereferensi nilai-nilai tersebut memberikan semua nol). Jadi apa yang sebenarnya saya lihat di sini?
Arsitektur prosesor 8086 asli (diimplementasikan sebagai Real Mode dalam prosesor 80286+) tidak memiliki relevansi untuk Linux, yang beroperasi dalam Mode Terlindungi. Tidak ada tabel vektor interupsi di alamat fisik 0, sebagai gantinya Tabel Interrupt Descriptor yang berisi Interrupt Descripors digunakan. IDT dapat ditemukan di mana saja dalam memori.
Kernel Linux mendapatkan peta memori fisik dari firmware (BIOS atau EFI) yang memberi tahu frame halaman memori fisik mana yang dapat digunakan dan mana yang dicadangkan atau tidak ada. Kisaran bingkai halaman yang dapat digunakan tidak bersebelahan, tetapi biasanya memiliki lubang besar di dalamnya. Secara tradisional, kernel x86 Linux telah melewatkan awal memori fisik, bahkan jika itu ditandai sebagai dapat digunakan. Dengan demikian, alamat fisik 0 tidak digunakan oleh kernel Linux.
sumber
53 ff
mengungkapkan bahwa ini kemungkinan besar sebenarnya merupakan tabel vektor interupsi Mode Riil 8086 yang dibuat oleh firmware atau boot loader.Memori pembuangan
Berikut adalah cara alternatif untuk membuang konten memori di dalam sistem vs harus melakukannya secara eksternal:
Analisis
Bagian atas di atas 000c0000 bisa jadi terkait dengan bootloader. Mengapa saya curiga ini? Kode 55aah di lokasi
Referensi: Boot Signature - BIOS000c0000
biasanya dapat menjadi tanda dalam memori untuk hal-hal seperti pemicu BIOS untuk menjalankan bootloader sekunder.Namun, mengingat bahwa 55aah ini terjadi dalam kisaran c0000h-effffh, maka kemungkinan besar bagian ini adalah Kepala Ekspansi PNP:
Referensi: Spesifikasi Boot BIOS53ff ...
Adapun data 53ffh yang ada di awal. Tidak jelas bagi saya apa itu sebenarnya. Lebih lanjut meneliti itu kemungkinan sesuatu bahwa kernel Linux menulis di sana setelah bootloading BIOS dari MBR diserahkan ke kernel Linux untuk boot.
Menggali lebih jauh saya dapat menemukan paragraf ini dari sebuah makalah penelitian berjudul: Injeksi Kode Berbahaya via / dev / mem :
Referensi
sumber