【发布时间】:2010-11-13 12:32:52
【问题描述】:
您好,我正在尝试查找存储数据的内存地址。
这是函数的汇编代码。
0x08048b20 <+0>: push %ebp
0x08048b21 <+1>: mov %esp,%ebp
0x08048b23 <+3>: sub $0x28,%esp
0x08048b26 <+6>: lea -0x14(%ebp),%eax
0x08048b29 <+9>: mov %eax,(%esp)
0x08048b2c <+12>: call 0x8048990 <Gets>
0x08048b31 <+17>: mov $0x1,%eax
0x08048b36 <+22>: leave
0x08048b37 <+23>: ret
我的字符串数据存储在 -0x14(%ebp) - (非常肯定)。我知道返回地址应该是 4(%ebp)。我想要做的是将返回地址设置为指向我的代码。我不能使用汇编来做到这一点。我需要知道我的函数开始的确切内存位置(我知道它存储在 -0x14(%ebp))。任何人都可以帮助我如何获取该位置的内存位置吗?
这一行的地址
0x08048b20 <+0>: push %ebp
0x08048b20 是我所在函数的内存位置,不是 %ebp 对吗?我的想法是,如果我得到 %ebp 的内存位置,我就可以计算出我的函数开始的内存位置。
我用的是gdb,不知道怎么获取它的内存地址? 请,任何帮助将不胜感激。 谢谢。
编辑: 当我站在汇编代码中的第 行时,我打印了 %ebp 和 %esp 的值,它们的精确差异为 0x28,就像它们应该的那样。所以我假设 %ebp 的地址是我在 gdb 中打印得到的值。
但是,当我从这个值 (0xbfffb5d8) 中减去 0x14 得到 0xbfffb5c4;它不知道跳到哪里。如果我将字符串(实际上是反汇编代码的字节码)存储在 -0x14(%ebp),并且我想运行该代码;我不应该将返回地址设置为 -0x14(%ebp) 还是我的想法完全错误?
【问题讨论】: