Nie jestem pewien, czy to pytanie powinno się znaleźć tutaj, czy w reverseengineering.stackexchange.com
Cytowanie z wikipedii :
W procesorze 8086 tablica przerwań nosi nazwę IVT (tablica wektorów przerwań). IVT zawsze znajduje się w tym samym miejscu w pamięci, od 0x0000 do 0x03ff i składa się z 256 czterobajtowych dalekich wskaźników trybu rzeczywistego (256 × 4 = 1024 bajtów pamięci).
Oto, co znajduję w monitorze 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
Nie jestem pewien, co sądzić o tych wartościach. Nie wygląda to na tablicę deskryptorów przerwań (dereferencja tych wartości daje wszystkie wartości null). Więc na co tak naprawdę tu patrzę?
Oryginalna architektura procesora 8086 (zaimplementowana jako tryb rzeczywisty w procesorach 80286+) nie ma znaczenia dla systemu Linux, który działa w trybie chronionym. Nie ma tablicy wektorów przerwań pod adresem fizycznym 0, zamiast tego używana jest tablica deskryptorów przerwań zawierająca deskryptory przerwań. IDT może znajdować się w dowolnym miejscu w pamięci.
Jądro Linux pobiera fizyczną mapę pamięci z oprogramowania układowego (BIOS lub EFI), która informuje, które ramki stron pamięci fizycznej są użyteczne, a które są zarezerwowane, a które nie. Zakres użytecznych ramek stron nie jest ciągły, ale zwykle ma w nim ogromne dziury. Tradycyjnie jądro Linuksa x86 pomijało początek pamięci fizycznej, nawet jeśli jest oznaczona jako użyteczna. Dlatego fizyczny adres 0 nie jest używany przez jądro Linuksa.
źródło
53 ff
ujawnia, że jest to najprawdopodobniej tak naprawdę tablica wektorów przerwań 8086 trybu rzeczywistego skonfigurowana przez oprogramowanie układowe lub moduł ładujący.Zrzucanie pamięci
Oto alternatywny sposób na zrzucenie zawartości pamięci w systemie w porównaniu z koniecznością wykonania tego na zewnątrz:
Analiza
Górna część powyżej 000c0000 może być związana z programem ładującym. Dlaczego miałbym to podejrzewać? Kod 55aah w lokalizacji
Odniesienie: Boot Signature - BIOS000c0000
może zwykle oznaczać w pamięci takie rzeczy, jak wyzwalacz dla BIOS-u do uruchomienia dodatkowego programu ładującego.Jednak biorąc pod uwagę, że 55aah występuje w zakresie c0000h-effffh, bardziej prawdopodobne jest, że ta część jest nagłówkiem rozszerzenia PNP:
Odniesienie: specyfikacja rozruchu systemu BIOS53ff ...
Jeśli chodzi o dane 53ffh, które są na początku. Nie jest dla mnie jasne, co to właściwie jest. Dalsze badania to prawdopodobnie coś, co napisał tam jądro Linux po załadowaniu systemu MBR przez MBR do jądra Linuxa w celu uruchomienia.
Kopiąc dalej, udało mi się znaleźć ten akapit z pracy badawczej zatytułowanej: Wstrzyknięcie złośliwego kodu przez / dev / mem :
Bibliografia
źródło