汇编:什么是返回值呢?

时间:2013-06-11 23:47:29

标签: assembly

如果我在汇编时启动子程序,我的堆栈指针%esp正在瞄准a 在开始时返回值。

  1. 我怎么能想象呢?返回地址是什么意思?
  2. 它只是指向堆栈中其他地址的指针吗?
  3. 如果是地址,我会在开头执行此命令:
  4. mov %esp,%edi     # copy return address to %edi
    mov $0xff,%cl     # write 255 in %ecx (it was 0x0 before)
    mov %ecx,(%edi)   # copy 255 to... the stack point, the return
    
         

    地址瞄准?                         #或只是覆盖返回地址?

1 个答案:

答案 0 :(得分:1)

  1. 在英特尔,你是正确的,在调用函数之前将返回地址推送到堆栈。

  2. 它不是堆栈的地址,而是一旦调用的函数完成后返回的指令的地址。例如,如果您有一个如下所示的程序:

     instruction1
     instruction2
     call someFunction
     instruction3
     instruction4
    

    someFunction完成时,它将跳回并继续执行instruction3。它知道返回的位置,因为执行instruction3指令时call的地址被推送到堆栈。 someFunction将使用ret地址将该地址弹出堆栈并返回。

  3. 您的示例会按照您的建议覆盖函数的返回地址 - 您可能不想这样做。