Почему & ldquo; _main & rdquo; символ не найден, когда файл .exe загружен в x64dbg?

Если вы хотите использовать ОС параллельно, вы можете рассмотреть возможность установки только одной ОС напрямую (например, Ubuntu / Linux), а затем запустить другие ОС внутри виртуальной машины, такие как VirtualBox или VMware Workstation.

Виртуальные машины позволяют запускать несколько ОС параллельно, без необходимости разметки диска. Они даже позволяют вам обмениваться папками между виртуальными машинами (например, иметь каталог Linux, доступный в вашей виртуальной установке Windows). Тем не менее, они страдают от более низкой производительности. Поэтому, если вы хотите использовать Windows для игр, возможно, стоит иметь собственную установку Windows и запустить Linux внутри виртуальной машины.

0
задан 13 August 2018 в 16:00

1 ответ

Хотя PE имеет поддержку для хранения отладочной информации, таблица символов в основном представляет собой концепцию ELF.

Если вы посмотрите разделы PE (используйте objdump -h), вы увидите много дополнительных разделов, не упомянутых в каталогах PE. Они используются binutils для извлечения информации DWARF и показывают вам, например, таблицу символов.

x64dbg - это чистый инструмент Windows / PE и не понимает DWARF. [D3] Однако он покажет вам адрес точки входа PE (реже адрес самого «main») и автоматически установит точку останова для вас. Точка входа отображается под символами экспорта проверяемого двоичного файла.

objdump -h

Кроме того, x64dbg будет ломаться на 'ntdll`, позволяя вы достигнете точки входа с использованием ниндзя CTRL + F9 (остерегайтесь обратных вызовов инициализации TLS).

Чтобы добраться до main, вы можете пройти через код, пока не найдете вызов по адресу в секции .text или просто вызов, за которым следуют два вызова cexit и ExitProcess.

Также, учитывая смещение _main, полученное с помощью objdumpt -t, VA _main is BASE ADDRESS + .text RVA + __main OFFSET. В моем случае это было 4010460h

1
ответ дан 15 August 2018 в 16:59

Другие вопросы по тегам:

Похожие вопросы: