当前位置:  开发笔记 > 编程语言 > 正文

为什么malloc会覆盖RSP和RSP + 8?

如何解决《为什么malloc会覆盖RSP和RSP+8?》经验,为你挑选了1个好方法。

您可以在此处阅读有关64位调用约定的信息.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

Michael Burr.. 7

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

注意,总是为寄存器参数分配空间,即使参数本身从不归位到堆栈; 确保被调用者已为其所有参数分配了空间.寄存器参数需要归属地址,因此如果被调用函数需要获取参数列表(va_list)的地址或单个参数,则可以使用连续区域.

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



1> Michael Burr..:

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

注意,总是为寄存器参数分配空间,即使参数本身从不归位到堆栈; 确保被调用者已为其所有参数分配了空间.寄存器参数需要归属地址,因此如果被调用函数需要获取参数列表(va_list)的地址或单个参数,则可以使用连续区域.

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

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有