【发布时间】:2015-07-16 00:44:14
【问题描述】:
结构体在汇编中如何作为参数传递?
由于结构的大小比正常情况大,各个字段是否按顺序传递?
如果是,它们是否像正常参数一样以相反的顺序排列?
cdecl 和 stdcall 有什么区别吗?
【问题讨论】:
-
这是 x86 还是 x86_64,您使用的是什么汇编程序?
-
它只是标准的 x86,虽然我对 x86_64 很好奇?
-
之所以有所不同,是因为两者之间的调用约定不同,x86_64通过寄存器传递前六个整数参数(从左起)以 RDI、RSI、RDX、RCX、R8 和 R9 的顺序传递,而 x86 以相反的顺序在堆栈上传递。我没有非标准类型大小结构的答案。我会四处逛逛。
-
显然结构是通过引用(通过指针)传递的,它是在 EAX/AX 中传递还是在堆栈中传递取决于编译器。显然,由于创建的非线程安全条件,大多数编译器不遵循关于类和结构的调用约定。这是一个讨论 gcc 和 Visual c++ 之间区别的链接X86 Assembly/High-Level Languages 它包含更多指向维基百科等的链接。
-
您也许应该添加一个您正在考虑的示例代码 sn-p...您是在询问 C 结构和数组还是其他什么?
标签: assembly x86 stdcall cdecl