您可以阅读有关64位调用约定here的信息。 x64函数应该自行清理,但是,当我从.asm调用malloc时,它将覆盖RSP和RSP + 8处的值。这似乎是非常错误的。有什么建议?

public TestMalloc

extern malloc : near

.CODE

align 8
TestMalloc proc
    mov rcx, 100h
    000000018000BDB8 48 C7 C1 00 01 00 00   mov         rcx,100h

    call malloc
    000000018000BDBF E8 CC AC 06 00         call        malloc (180076A90h)

    ret
    000000018000BDC4 C3                     ret
    000000018000BDC5 66 66 90               xchg        ax,ax
TestMalloc endp

END

最佳答案

对于x64调用约定,即使参数在寄存器中传递,调用方也需要为它们在堆栈上节省空间:



http://msdn.microsoft.com/en-us/library/ew5tede7.aspx

关于windows - 为什么malloc覆盖RSP和RSP + 8?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/387145/

10-09 06:31