C中的堆栈输出

时间:2014-11-14 18:50:27

标签: c gdb stack

提前:我不想要任何“即用型”解决方案。特别是,它会破坏学习东西的目的。这是我的主要目标:我想要的是一些解释/提示或更深入的理解。

现在问题:

使用gdb并设置断点后,将生成以下堆栈输出(c-program):

现在出现的问题是:

0xbfa62f84:0x08048350 0xbfa62fe8 0xb7df0390 0x00000001

0xbfa62f94:0xbfa63014 0xbfa6301c 0xb7f262d0 0x00000000

这些值代表什么?或者它们如何被拆解/分解? 我假设他们编码内存地址+一些OP代码,如mov,sub等。 但是怎么样?为什么?或者以不同的方式问:这些说明怎么能“读出来”?

提前致谢

2 个答案:

答案 0 :(得分:1)

如果您想了解这样的流,请使用像Keil这样的调试器。同时您可以同时看到汇编代码和生成的hex文件以及源代码。然后当您单步执行代码时您将了解程序集与hex文件和源代码的关系。

答案 1 :(得分:1)

机器代码未存储在堆栈中;但是,存储在堆栈帧中的返回地址指向机器代码。 0x08048350是代码地址的理想选择(在x86上,代码段从低地址开始);你可以检查从那个地址开始的内存,并试图弄清楚操作码和寄存器。

或者您可以使用gdb命令x/i显示从该地址开始的指令 - x/16i 0x08048350将显示从该地址开始的前16条指令。