Можем ли мы проверить объектный файл на наличие временных значений, введенных компилятором C++?

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

//file1.cpp
void func(const int& num){}
int main(){   func(2);  }

4 ответа

Самый простой способ сделать это - загрузить программу, которая использует объектный файл, и разобрать функцию в отладчике. Код программы, который вы разместили, подойдет для этого. Просто перерыв на вызов func а затем отобразить ассемблер, когда вы перейдете в функцию.

В более сложной программе вы можете обычно отображать код ассемблера для данной функции по имени. Обратитесь к документации отладчика, чтобы узнать, как это сделать. В Windows (Visual Studio) вы можете открыть Disassembly окно и введите имя функции для отображения кода ассемблера.

Если у вас есть исходный код, большинство компиляторов позволяют вам выводить ассемблер, иногда смешанный с исходным кодом. Для Visual C++ это / Fa.

Если у вас есть доступный исходный код, возможно, проще взглянуть на файл ассемблера, сгенерированный компилятором (-save-temps для gcc). Иначе, objdump твой друг.

Ты можешь использовать clang -cc1 --ast-print-xml чтобы получить XML-представление модуля перевода. Присутствие временных может быть легко обнаружено с помощью AST.

Если вы работаете в системе ELF и используете GNU binutils, вы можете позвонить readelfвероятно с -s переключатель.

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