内存中的局部变量位置

bka*_*521 7 c arm objdump

对于家庭作业,我已经获得了一些c文件,并使用arm-linux-gcc编译它们(我们最终会定位gumstix板,但是对于这些练习,我们一直在使用qemu和ema).

其中一个问题让我感到困惑 - 我们被告知:

使用arm-linux-objdump查找可执行二进制文件中main()中声明的变量的位置.

但是,这些变量是本地的,因此在运行之前不应该有地址,对吗?

我想也许我需要找到的是堆栈帧中的偏移量,实际上可以使用objdump找到它(不是我知道的).

无论如何,对此事的任何见解将不胜感激,如果有必要,我很乐意发布源代码.

The*_*sey 1

这将取决于程序以及他们想要变量的位置的准确程度。问题是想知道它们存储在哪个代码段中吗?.const .bss 等?它需要具体地址吗?无论哪种方式,一个好的开始是使用 objdump -S 标志

objdump -S myprogram > dump.txt
Run Code Online (Sandbox Code Playgroud)

这很好,因为它会打印出源代码和带有地址的程序集的混合内容。从这里开始,只需搜索您的int main内容即可开始。

  • 好吧,您需要了解一些有关编译器如何构建可执行文件的信息。例如,GCC 创建一个 _start() 函数,该函数最终调用 main()。_start() 的地址将是可执行文件的入口点。确保您知道老师要求的是哪一个:可执行文件的入口点,还是带有符号“main”的函数。 (2认同)