2010-04-16 5 views
2

Есть ли способ узнать, определена ли переменная, просмотрев исполняемый файл.Проверка переменной в исполняемом файле

Допустим, я объявляю

int i; 

в главной функции. Компилируя и связывая, я получаю исполняемый файл my_program.exe.

Теперь, глядя внутрь my_program.exe, я могу сказать, если он имеет INT Эгер переменную я?

ответ

3

Нет, если вы не скомпилируете с включенной отладкой.

+2

И до тех пор, пока оптимизация отключена. При оптимизации некоторые переменные могут не отображаться в символах отладки, потому что они оптимизируются. – JayM

1

Если вы компилируете с помощью отладочных символов (например, gcc -g), вы можете использовать свой отладчик, чтобы увидеть почти все.

2

Как уже было сказано, отладочная информация покажет его. Более конкретно, для ELF файлов:

readelf -w binary-name 

будет иметь следующую запись:

<2><58>: Abbrev Number: 4 (DW_TAG_variable) 
<59>  DW_AT_name  : i 
<5b>  DW_AT_decl_file : 1 
<5c>  DW_AT_decl_line : 2 
<5d>  DW_AT_type  : <73> 
<61>  DW_AT_location : 2 byte block: 91 6c (DW_OP_fbreg: -20) 

без отладочной информации, местные жители не сохраняют свои имена. Если переменная является глобальной, будет символ, который указывает на него:

objdump -t binary-name 

0804a010 g  O .data 00000004    i 

информация Тип теряется, но вы можете увидеть размер 4

0

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

Смежные вопросы