[英]What is the memory address of my code?
嗨,我试图找到我的数据存储位置的内存地址。
这是函数的汇编代码。
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,但我不知道如何获取它的内存地址? 请任何帮助将不胜感激。 谢谢。
编辑:当我站在汇编代码中的第<+6>行时,我将打印%ebp和%esp的值,并且它们应该有0x28的精确差。 所以我假设%ebp的地址是我在gdb中打印时得到的值。
但是,当我从该值(0xbfffb5d8)减去0x14得出0xbfffb5c4时; 它不知道跳到哪里。 如果我已经将我的字符串(实际上是反汇编代码的字节码)存储在-0x14(%ebp)上,并且我想运行该代码; 我应该将寄信人地址设为-0x14(%ebp)还是完全错误地考虑?
在函数的第一行之前放置一个标签。 然后引用标签将为您提供编译函数中第一个操作码的地址。 不幸的是,我对您的问题了解不足,无法为您提供更多帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.