你可以在这里阅读关于64位调用约定。 x64函数应该自己清理,但是,当我从.asm中调用malloc时,它将覆盖RSP和RSP + 8的值。 这似乎是非常错误的。 有什么build议么?
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
通过windows API函数replace对AfxGetInstanceHandle()的调用
在pipe道中获取命令输出,C为linux
将Delphi代码移植到64位 – 为什么没有编译器警告?
当使用CREATE_NEW_PROCESS_GROUP创build主机时,将Ctrl + C发送给subprocess
钩住windows中的所有新进程和命令行参数
对于x64调用约定,即使参数在寄存器中传递,调用者也需要在堆栈中节省空间:
请注意,即使参数本身从未寄存到堆栈,总是会为寄存器参数分配空间; 一个被调用者保证为其所有参数分配空间。 寄存器参数需要寄存器地址,因此在被调用的函数需要获取参数列表(va_List)的地址或个别参数的情况下,可以使用连续的区域。
http://msdn.microsoft.com/en-us/library/ew5tede7.aspx
我不太清楚,如实,但你有没有尝试在调试器中通过程序集? 如果你遵循内部的逻辑,你可能会发现一些线索。 我推荐WinDbg 。
总结以上是内存溢出为你收集整理的为什么malloc覆盖RSP和RSP + 8?全部内容,希望文章能够帮你解决为什么malloc覆盖RSP和RSP + 8?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)