Что вызывает различия между драйвером на диске и драйвером, отображаемым в память? - PullRequest
1 голос
/ 22 октября 2010

Эй, Сегодня я попытался сделать двоичный анализ NDIS.sys, и я заметил кое-что странное. Я взял функцию и начал ее использовать. Первые 30 байтов были одинаковыми на диске (с использованием IDA) и в памяти (с использованием WinDbg). Затем что-то изменилось. Я видел что-то вроде "jmp _ imp _XXXXX". байты JMP были одинаковыми, но адрес был другим.

Мой вопрос - в чем разница? Я думаю, что это как-то связано с переездом. Хотя переход заключается в адресации в одном и том же модуле, это длинный переход, который делает его относительно базового адреса модуля. Если перемещение произошло, ему также необходимо переместить этот адрес, хотя он находится в том же модуле.

Я прав или полностью неправ? :-) Спасибо.

1 Ответ

2 голосов
/ 22 октября 2010

Да, цели перехода перезаписываются во время перемещения, когда модуль не загружен по предпочтительному базовому адресу в памяти. На самом деле разработчикам рекомендуется указывать базовый адрес не по умолчанию для своих модулей, чтобы избежать затрат на перемещение, но многие этого не делают, поэтому некоторые модули всегда перемещаются, и загрузчик должен перезаписывать цели перехода.

...