№ 6">
Поскольку динамические библиотеки перемещаемы, адреса в дизассемблере могут не совпадать с отладчиком. Вот, например, в oorwiz.dll IDA определяет адрес функции RegWiz_InitTrial как 10001D00h, а soft-ice как F60000. Ну, и как с этим жить? А вот как: базовый адрес загрузки (Imagebase) равен 10000000h, в чем IDA честно признается в начале файла. Но загрузить по этому адресу библиотеку не получается и операционная система перемещает ее по адресу xxxx, о чем говорит команда «MOD» в soft-ice: :mod hMod Base Module Name File Name 80400000 804000C8 ntoskrnl \WINNT\System32\ntoskrnl.exe … 00400000 00400108 oodled \Program Files\OO Software\DriveLED2\ood 00F30000 00F300B8 oodlrwrs \Program Files\OO Software\DriveLED2\ood 00F60000 00F600F8 oorwiz \Program Files\OO Software\DriveLED2\oor 10000000 100000C0 oodledrs \Program Files\OO Software\DriveLED2\ood Листинг 4. Просмотр базовых адресов загрузки командой MOD.
Разница базовых адресов составляет 10001000 - F60000 = F0A1000, поэтому чтобы перевести адрес из отладчика в дизассемблер к нему необходимо добавить F0A1000, а из дизассемблера в отладчик — отнять.
Рисунок 6. Загрузка экспорта из динамических библиотек.
Поскольку динамические библиотеки перемещаемы, адреса в дизассемблере могут не совпадать с отладчиком. Вот, например, в oorwiz.dll IDA определяет адрес функции RegWiz_InitTrial как 10001D00h, а soft-ice как F60000. Ну, и как с этим жить? А вот как: базовый адрес загрузки (Imagebase) равен 10000000h, в чем IDA честно признается в начале файла. Но загрузить по этому адресу библиотеку не получается и операционная система перемещает ее по адресу xxxx, о чем говорит команда «MOD» в soft-ice: :mod hMod Base Module Name File Name 80400000 804000C8 ntoskrnl \WINNT\System32\ntoskrnl.exe … 00400000 00400108 oodled \Program Files\OO Software\DriveLED2\ood 00F30000 00F300B8 oodlrwrs \Program Files\OO Software\DriveLED2\ood 00F60000 00F600F8 oorwiz \Program Files\OO Software\DriveLED2\oor 10000000 100000C0 oodledrs \Program Files\OO Software\DriveLED2\ood Листинг 4. Просмотр базовых адресов загрузки командой MOD.
Разница базовых адресов составляет 10001000 - F60000 = F0A1000, поэтому чтобы перевести адрес из отладчика в дизассемблер к нему необходимо добавить F0A1000, а из дизассемблера в отладчик — отнять.