如何从函数返回并在堆栈上存储值而不覆盖返回地址?

时间:2020-07-28 23:03:42

标签: assembly x86 masm calling-convention irvine32

我正在使用Irvine32处理32位MASM程序集。最近,我学习了如何使用EBP / ESP从函数中的堆栈访问值,但是我的程序要求函数的输出在返回时存储在堆栈的顶部(这是我的意思,将值2nd存储到函数的顶部)。堆栈,返回之后,该值将位于顶部。)

对于如何从这里最有效地解决此问题,我感到非常困惑。我一直在寻找不同的解决方案,但不确定如何解决该问题。

我曾考虑过将值压入堆栈的顶部,并通过临时存储它们来交换值,但是当我尝试实现该功能时,它没有用,我认为这可能是一个过于复杂的解决方案简单的问题。

main PROC   
    mov eax, 0
    mov ebx, 0
    mov edx, 0
    push OFFSET aVal
    push OFFSET bVal
    push OFFSET cVal
    call testFunc
    pop eax ; Ideally, this would be the same EAX value as the function below, but I don't know how to store it 
            ; on the stack from the function below without overriding the return value
    call WriteInt
    
   
exit
main ENDP

testFunc PROC
    push esi
    mov esi, esp
    mov eax,[esi + 16]
    add eax,[esi + 12]
    sub eax,[esi + 8]
    pop esi
    ret
    
testFunc endp

我知道,当惯例要求我应该使用其他寄存器时,我正在使用ESI寄存器,但是我的教授也要求这样做。

0 个答案:

没有答案
相关问题