Зачем мне нужны разные параметры дампа для разных типов изображений?

Я использую dumpbin недавно, чтобы увидеть символы в некоторых статических библиотеках, используя dumpbin foo.lib /symbols, Я хотел посмотреть, как это можно использовать для исполняемых файлов и библиотек DLL.

Мое первое наблюдение заключается в том, что dumpbin foo.{exe|dll} /symbols ничего не возвращает.

Для библиотек DLL я заметил, что опция экспорта необходима для получения символьных данных:
dumpbin foo.dll /exports, Почему этот вариант необходим в этом случае? Если соответствующий файл * .iobj доступен, я могу использовать dumpbin foo.iobj /symbols выводит ВСЕ символы, тогда как / export в DLL, я полагаю, показывает только символы, предоставляемые DLL.

Для исполняемых файлов dumpbin bar.exe /symbols ничего не выдает, где как dumpbin bar.exe /exports кажется, сбросить некоторые символы.

Кто-нибудь может объяснить, что здесь происходит под капотом?

0

Решение

Аргументы, которые вы используете для dumpbin, сообщают ему, какие разделы файла нужно выгрузить.

Причина, по которой вам нужно использовать разные аргументы, заключается в том, что вы просматриваете фрагменты данных, которые похожи друг на друга действительно внимательно, но (с точки зрения PE-файла) это совершенно разные фрагменты данных, которые хранятся в разных разделах файла.

Итак, когда вы создаете объектный файл, он определяет некоторые символы, и они входят в раздел символов PE-файла. Когда вы связываете их для создания DLL / EXE-файла, любые экспортируемые символы создают записи в разделе экспорта файла. С нашей точки зрения, они выглядят похожими (на самом деле экспортируемое имя обычно будет именем некоторого символа, который был в разделе символов некоторого объектного файла), но оно все еще хранится в другом разделе.

Когда компилятор делает свое дело, он записывает данные в раздел символов, но (по крайней мере, обычно) вообще не создает раздел импорта или экспорта. Затем компоновщик делает свое дело, в основном читая из раздела символов и записывая в разделы импорта и экспорта. Затем загрузчик делает свое дело, в основном читая из разделов импорта и экспорта и игнорируя раздел символов.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]