Расположение скомпилированных объектов

Есть ли путь — во многом как просмотр результата предварительной обработки с gcc -E— видеть то, на что мои объекты похожи когда-то скомпилированный в объектные файлы?

Я говорю о GCC, но решение включая MSVC было бы прекрасно.

17
задан user257620 26 May 2010 в 06:12
поделиться

6 ответов

Вы можете осмотреть распорок дворовочных файлов и их содержимое с использованием файлов карты. Используйте / map для Vc и -Map или - Print-Map для GCC.

0
ответ дан 30 November 2019 в 12:13
поделиться

Для скомпилированных GCC исполняемых файлов проверьте Pahole . Она покажет вам, как компилятор разместил ваши структуры/классы и есть ли в них "дыры" или нет. Дыры - это отступы из-за правил выравнивания памяти.

6
ответ дан 30 November 2019 в 12:13
поделиться

Ваш вопрос немного запутан.

Если вы хотите увидеть результат препроцессирования с помощью MSVC, вы можете использовать /E, /P/ или /EP.

В MSVC есть недокументированная возможность показать расположение структур и классов данных. Мне сейчас трудно его найти.

0
ответ дан 30 November 2019 в 12:13
поделиться

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

0
ответ дан 30 November 2019 в 12:13
поделиться

Конструктор - это просто другая функция (если только оно встроена). Файлы объектов содержат много информации для линкера; Таким образом, вы должны быть в состоянии найти функцию в файле .a (Имена функций будут разорваться, хотя и).

0
ответ дан 30 November 2019 в 12:13
поделиться

Для Visual C++:

Мне наконец-то удалось откопать (хорошо скрытые!) недокументированные флаги компилятора, которые поддерживает MSVC++, используя информацию из здесь и здесь. Вот они:

/d1reportSingleClassLayoutXXX
/d1reportAllClassLayout

(замените XXX на имя класса)

27
ответ дан 30 November 2019 в 12:13
поделиться