где переменная и ее размер хранятся в файле windows executabe?


-1

enter image description here

Я новичок в обратном проектировании. Я хочу понять, где переменные и его размер хранятся в исполняемом файле Windows.

как-то я могу найти значения переменных i, объявленных внутри c-программы.

как вы можете видеть в 00402000 bar Значение переменной сохраняется.
, но я не могу найти, где хранится имя переменной «bar» и ее размер.

В значениях раздела данных данные сохраняются. В каком разделе я могу найти имена переменных и размеры?
, тогда у меня есть еще одно сомнение, как вы можете видеть на картинке, есть какой-то адрес, например 00402000. это адрес байта, который существует в жестком диске?
как RAM, HardDisk также имеет адрес для каждого байта?

2

В значениях раздела данных данные сохраняются.

Да, так оно и работает. Информация об переменных, таких как имя, размер и тип, представляет собой языковые концепции на высоком уровне. Такая информация теряется, когда код, написанный на языке высокого уровня, компилируется в машинный код. Это связано с тем, что обратные инженерные двоичные исполняемые файлы могут быть сложными.

Читайте ответы на этот вопрос: how data types and variables are converted to machine code?

Ширина бит значения (полуслова, слово, двойное слово, и т.д.), иногда может быть выведено из чтения/записи операций, выполняемых на нем; если он записан из памяти в регистр, вы можете посмотреть размер регистра. eax - 32 бит, al - 16 бит и т. Д.

Чтобы найти статически распределенные переменные, разобрать функции (ы), к которым они обращаются. Указатели (адреса памяти) для этих переменных будут операндами в инструкциях, которые обращаются к этим значениям.

В вашем случае это означает дизассемблирование main(). Поскольку ничего не делается с переменными в main(), кроме переназначения, возможно, что компилятор не создал никакого кода, ссылающегося на эти переменные (исключение мертвого кода).

то у меня есть еще одно сомнение, как вы можете видеть на картинке, есть какой-то адрес, например 00402000. Это адрес байта, который существует в жестком диске?

Это адрес в виртуальной памяти. Подробнее об этом читайте здесь:

Linux Пример: http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory/

https://stackoverflow.com/questions/2170843/va-virtual-address-rva-relative-virtual-address