Можем ли мы проверить объектный файл на наличие временных значений, введенных компилятором C ++? - PullRequest
0 голосов
/ 24 ноября 2010

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

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

Ответы [ 4 ]

3 голосов
/ 24 ноября 2010

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

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

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

0 голосов
/ 24 ноября 2010

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

0 голосов
/ 24 ноября 2010

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

0 голосов
/ 24 ноября 2010

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

...