提前:我不想要任何“即用型”解决方案。特别是,它会破坏学习东西的目的。这是我的主要目标:我想要的是一些解释/提示或更深入的理解。
现在问题:
使用gdb并设置断点后,将生成以下堆栈输出(c-program):
现在出现的问题是:
0xbfa62f84:0x08048350 0xbfa62fe8 0xb7df0390 0x00000001
0xbfa62f94:0xbfa63014 0xbfa6301c 0xb7f262d0 0x00000000
这些值代表什么?或者它们如何被拆解/分解? 我假设他们编码内存地址+一些OP代码,如mov,sub等。 但是怎么样?为什么?或者以不同的方式问:这些说明怎么能“读出来”?
提前致谢
丹
答案 0 :(得分:1)
如果您想了解这样的流,请使用像Keil这样的调试器。同时您可以同时看到汇编代码和生成的hex文件以及源代码。然后当您单步执行代码时您将了解程序集与hex文件和源代码的关系。
答案 1 :(得分:1)
机器代码未存储在堆栈中;但是,存储在堆栈帧中的返回地址指向机器代码。 0x08048350
是代码地址的理想选择(在x86上,代码段从低地址开始);你可以检查从那个地址开始的内存,并试图弄清楚操作码和寄存器。
或者您可以使用gdb命令x/i
显示从该地址开始的指令 - x/16i 0x08048350
将显示从该地址开始的前16条指令。