繁体   English   中英

我的代码的内存地址是多少?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM