Создать заголовок представления .obj файла - PullRequest
2 голосов
/ 31 марта 2010

Есть ли способ создать заголовочный файл c ++ для файла .obj? Или, может быть, есть утилита, которая может просматривать файлы .obj. Я уже нашел objconv, который конвертирует между форматами, но я не могу найти генератор .h / viewer.

Ответы [ 3 ]

4 голосов
/ 01 апреля 2010

Учитывая тег C ++, ситуация не так безнадежна, как подразумевают некоторые другие ответы.

В частности, по крайней мере, в большинстве компиляторов C ++ имя функции будет искажено (Microsoft называет его «украшенным»), чтобы указать параметры, принимаемые этой функцией. Схема искажения варьируется от одного компилятора к другому, но по существу любой из них кодирует достаточно информации, чтобы вы могли заново создать объявление для функции - тип возвращаемого значения, имя самой функции, имя класса, если это функция-член и точное число и тип параметров, ожидаемых функцией.

Хотя это и не нужно делать путем искажения имени, у системы C ++ нет другого выбора, кроме как включить информацию о параметрах в объектный файл. Когда вы перегружаете функции, компоновщику нужно каким-то образом разобраться, какую перегрузку связать с конкретным вызовом.

Я должен добавить, что сортировка всего этого может быть довольно трудоемкой, хотя - например, если код включает шаблоны, имя символа в объектном файле будет расширяться все шаблон параметры (включая параметры по умолчанию). Например, рассмотрим тривиальный код, подобный следующему:

#include <vector>
#include <string>

std::vector<std::string> x;

Когда я компилирую это с VC ++, а затем выполняю dumpbin /symbols foo.obj, вывод составляет около 75 килобайт. Несмотря на то, что мой исходный код, по-видимому, определяет только один символ, объектный файл содержит определения примерно для 180 символов, многие из которых почти полностью не связаны со всем, что я написал.

Стоит также отметить, что если объектный файл был скомпилирован с отладочной информацией, это (как правило) будет производить значительно больше информации о типе (и тому подобное) в объектном файле.

2 голосов
/ 31 марта 2010

Ваш вопрос помечен visual-c++, поэтому я предполагаю, что вы используете Windows.

Создание исходных файлов заголовков из объектных файлов невозможно, так как большая часть (возможно, большая часть) информации в заголовочных файлах удаляется при компиляции исходного кода в объектные файлы.

Однако вы можете использовать утилиту dumpbin для проверки объектных файлов на очень низком уровне. Единственная информация, представленная в объектном файле, которая может быть вам интересна, - это список имен символов, которые определены в данном объектном файле. Вы не можете получить информацию о типе из объектного файла. Таким образом, вы не можете сказать, какое значение принимает или ожидает данная функция.

В некоторых ситуациях (когда все аргументы передаются в функцию через стек) вы могли бы определить количество аргументов, которые ожидает функция (разбирая начало кода функции и считая, сколько значений извлечено из стека ). Это не будет работать в подавляющем большинстве случаев.

0 голосов
/ 31 марта 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...