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

时间:2010-11-13 12:32:52

标签: assembly x86

您好我正在尝试查找存储数据的内存地址。

这是函数的汇编代码。

   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,我不知道如何获取它的内存地址? 请,任何帮助将不胜感激。 谢谢。

修改 当我站在线&lt; + 6&gt;在汇编代码中,我打印%ebp和%esp的值,它们的确具有0x28的精确差异。所以我假设%ebp的地址是我在gdb中打印时得到的值。

但是,当我从该值(0xbfffb5d8)中减去0x14时,给出0xbfffb5c4;它不知道去哪里。如果我已将我的字符串(实际上是反汇编代码的字节代码)存储在-0x14(%ebp),并且我想运行该代码;我不应该把退货地址放到-0x14(%ebp)或我是否完全错误地思考?

1 个答案:

答案 0 :(得分:0)

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