【问题标题】:What is the memory address of my code?我的代码的内存地址是什么?
【发布时间】: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) 还是我的想法完全错误?

【问题讨论】:

    标签: assembly x86


    【解决方案1】:

    在函数的第一行之前放置一个标签。然后引用标签将为您提供编译函数中第一个操作码的地址。不幸的是,我对您的问题的理解不足以帮助您。

    【讨论】:

      猜你喜欢
      • 2017-04-16
      • 1970-01-01
      • 2019-03-17
      • 1970-01-01
      • 1970-01-01
      • 2011-08-12
      • 2020-01-04
      • 2021-01-03
      • 1970-01-01
      相关资源
      最近更新 更多