其中变量和它的大小存储在windows executabe文件内?


-1

enter image description here

我是逆向工程的初学者。我想知道变量和它的大小存储在Windows可执行文件中的位置。

不知何故我能够找到我在c程序中声明的变量的值。

您可以在00402000中看到变量的值被存储。
但我找不到变量名称“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