【发布时间】:2013-11-20 17:40:46
【问题描述】:
我有一个带有签名的函数:
extern "C" int foo(int a, int b, int c, int d, int e);
实际上是用汇编语言编写的。
使用 ml(32 位),使用标准调用约定,您几乎可以编写
.code
foo PROC a: DWORD, b: DWORD ,c: DWORD, d: DWORD, e: DWORD
mov eax, d
mov ebx, e
并开始使用这些标签来访问您的论点
对于 ml64(64 位),fastcall 是唯一可用的约定。我可以毫无问题地访问存储在寄存器中的第一个参数,但访问堆栈中的参数(在此示例中为e)时出现问题:我尝试过
.code
foo PROC a: DWORD, b: DWORD ,c: DWORD, d: DWORD, e: DWORD
和
.code
foo PROC e: DWORD
但e 中的值是垃圾。
我发现如果我直接使用堆栈地址就可以找到值。
.code
foo PROC e: DWORD
mov eax, r9 ; d
mov ebx, DWORD PTR[rbp + 48] ; e
还有其他方法吗?
【问题讨论】:
标签: c++ visual-studio-2010 assembly 64-bit masm