Assembly 我的代码的内存地址是什么?

Assembly 我的代码的内存地址是什么?,assembly,x86,Assembly,X86,嗨,我正在试图找到存储我的数据的内存地址 这是函数的汇编代码 0x08048b20 <+0>: push %ebp 0x08048b21 <+1>: mov %esp,%ebp 0x08048b23 <+3>: sub $0x28,%esp 0x08048b26 <+6>: lea -0x14(%ebp),%eax 0x08048b29 <+9>:

嗨,我正在试图找到存储我的数据的内存地址

这是函数的汇编代码

   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   
0x08048b20:推送%ebp
0x08048b21:mov%esp,%ebp
0x08048b23:子$0x28,%esp
0x08048b26:lea-0x14(%ebp),%eax
0x08048b29:mov%eax,(%esp)
0x08048b2c:调用0x8048990
0x08048b31:mov$0x1,%eax
0x08048b36:离开
0x08048b37:ret
我的数据是一个字符串,它存储在-0x14(%ebp)-(非常肯定)。我知道回信地址应该是4(%ebp)。我要做的是将返回地址设置为指向我的代码。我不能用汇编来做这个。我需要知道函数启动的确切内存位置(我知道它存储在-0x14(%ebp))。有人能帮我找到那个位置的记忆位置吗

这一行的地址

0x08048b20 <+0>:     push   %ebp
0x08048b20:推送%ebp
0x08048b20是我所在函数的内存位置,不是%ebp对吗?我的想法是,如果我得到%ebp的内存位置,我就可以计算函数启动位置的内存位置

我正在使用gdb,我不知道如何获取它的内存地址? 请,任何帮助都将不胜感激。 多谢各位

编辑: 当我站在汇编代码的第行时,我打印了%ebp和%esp的值,它们的精确差值为0x28。所以我假设%ebp的地址是我在gdb中打印它时得到的值


但是,当我从这个值(0xbfffb5d8)中减去0x14,得到0xbfffb5c4;它不知道跳到哪里。如果我已经将我的字符串(实际上是反汇编代码的字节码)存储在-0x14(%ebp),并且我想运行该代码;我是否应该将返回地址设置为-0x14(%ebp),或者我的想法完全错误?

在函数的第一行之前添加一个标签。然后引用标签将给出编译函数中第一个操作码的地址。不幸的是,我对您的问题理解不够,无法为您提供更多帮助。

在函数的第一行前面加上标签。然后引用标签将给出编译函数中第一个操作码的地址。不幸的是,我对你的问题理解不够,无法帮助你