Я не уверен, должен ли этот вопрос идти здесь или в reverseengineering.stackexchange.com
Цитата из Википедии :
В процессоре 8086 таблица прерываний называется IVT (таблица векторов прерываний). IVT всегда находится в одном и том же месте в памяти, в диапазоне от 0x0000 до 0x03ff, и состоит из 256 четырехбайтовых дальних указателей реального режима (256 × 4 = 1024 байта памяти).
Вот что я нахожу в мониторе 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
Я не уверен, что делать с этими ценностями. Он не похож на таблицу дескрипторов прерываний (разыменование этих значений дает все нули). Так что я на самом деле смотрю здесь?
Исходная архитектура процессора 8086 (реализованная в реальном режиме в процессорах 80286+) не имеет отношения к Linux, который работает в защищенном режиме. Нет таблицы векторов прерываний по физическому адресу 0, вместо этого используется таблица дескрипторов прерываний, содержащая дескрипторы прерываний. IDT может быть расположен где угодно в памяти.
Ядро Linux получает карту физической памяти из встроенного программного обеспечения (BIOS или EFI), которая сообщает, какие фреймы страницы физической памяти можно использовать, а какие зарезервированы или отсутствуют. Диапазон используемых рамок страницы не является смежным, но обычно имеет огромные дыры. Традиционно ядро x86 Linux пропустило начало физической памяти, даже если оно помечено как пригодное для использования. Таким образом, физический адрес 0 не используется ядром Linux.
источник
53 ff
показывает, что это, скорее всего, на самом деле таблица векторов прерываний реального режима 8086, созданная микропрограммой или загрузчиком.Сброс памяти
Вот альтернативный способ выгрузки содержимого памяти внутри системы вместо необходимости делать это внешне:
Анализ
Верхняя часть выше 000c0000 может быть связана с загрузчиком. Зачем мне это подозревать? Код 55aah на месте
Ссылка: Boot Signature - BIOS000c0000
обычно может быть меткой в памяти для таких вещей, как триггер для BIOS для запуска вторичного загрузчика.Однако, учитывая, что 55aah происходит в диапазоне c0000h-effffh, более вероятно, что эта часть является заголовком расширения PNP:
Справка: спецификация загрузки BIOS53ff ...
Что касается 53ffh данных, которые находятся в начале. Мне неясно, что это на самом деле. Дальнейшее изучение этого вопроса, вероятно, было написано ядром Linux после того, как загрузка BIOS MBR была передана ядру Linux для загрузки.
Копая дальше, я смог найти этот абзац в исследовательской работе под названием: « Инъекция вредоносного кода через / dev / mem :
Ссылки
источник