2012-05-19 7 views
3

Как правило, когда я отлаживаю IDA, я не сталкиваюсь с какими-либо проблемами; однако с этим одним конкретным процессом (размер которого составляет 9,9 МБ до модулей). IDA настаивает на том, чтобы он переустанавливал каждый раз, когда он запускает этот процесс, что замерзает IDA и заставляет меня ждать хорошие 20-30 минут, прежде чем он начнется.Rebasing and debugging

Почему это так, и могу ли я как-то отключить это? Я новичок в продвинутой отладке, такой как это, поэтому перезагрузка только немного меня интересует.

+0

Вы могли бы предоставить немного больше контекста ?, например, какую операционную систему, возможно, ссылку на исполняемый файл, который вы пытаетесь отлаживать? –

ответ

8

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

Чтобы исправить это, вы можете использовать инструмент ReBase.exe, который поставляется с SDK окна (или Visual Studio),

ReBase.Exe -b 7600000 myBadBasedDll.dll так, что сбросит базу DLL для 0x7600000. Затем вы должны сделать перебазироваться в IDA в последний раз, чтобы сделать ваш СПР в синхронизации (или сделать новый СПР после перебазирования)

Edit->Segments->Rebase Program...

В новом меню установите флажки для Fix up Program и Rebase the whole image и он должен хорошо идти.

+0

Это более актуально. Маркировка как ответ. – Qix

+0

Как он может быть использован? каждый процесс имеет собственное адресное пространство ... – Remko

+0

@Remko При работе с DLL вы сопоставляете адресное пространство DLL в адресное пространство вашего EXE. Если вы загружаете несколько DLL, две библиотеки DLL могут иметь одинаковый «Предпочтительный адрес». Когда это происходит, вторая DLL для загрузки получает случайный доступный адрес. Если эта 2-я DLL является той, которую вы декомпилируете, IDA необходимо будет переместить ее базовый адрес для вашего декомпилированного кода каждый раз, когда он запускается. –

1

На этот вопрос ответил Will Donohoe 31-05-2013. Сайт в момент доступа является https://will.io/blog/2013/05/31/disable-aslr/

Как объяснено на сайте, проблема возникла (по крайней мере в моем случае) в результате Address Space Layout рандомизации (ASLR). ASLR активируется, когда поле DllCharacteristicsPE Дополнительный заголовок содержит маску IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE, которая имеет значение 0x0040.

В моем случае DllCharacteristics поле было 0x8160 так ясно 0x0040 маска присутствовала.

Исправлена ​​проблема с повторяющейся перезагрузкой, удаляя маску 0x0040. Установка DllCharacteristics поле 0x8120 или 0x8100 сделал трюк для меня.

Примечание: ВDllCharacteristics поле может быть расположен на смещение 0x5e от начала Подпись PE Смещение при использовании Hex Editor.

 Смежные вопросы

  • Нет связанных вопросов^_^