我有一个像这样的fasm的汇编代码:
struct TestStruct
test dd 0
ends
proc TestProc theArg:TestStruct
mov eax,[theArg.test]
ret 4
endp
start:
virtual at 0
lpTest TestStruct
end virtual
lea eax, [lpTest]
invoke TestProc, eax
invoke ExitProcess, 0
.end start
所以,我试图传递一个结构TestStruct
作为对TestProc
的引用,所以在C中它会与此相同:
int _stdcall TestProc(TestStruct * arg)
{
return arg->test;
}
...
TestStruct arg;
TestProc(&arg);
我在堆栈中声明了它
virtual at 0
lpTest TestStruct
end virtual
但是当我编译时,我得到了编译错误:
Error Extra character on line: label ..arg?WJ TestStruct
此错误出现在此行:
proc TestProc theArg:TestStruct
如何通过引用正确传递此结构?
答案 0 :(得分:0)
与
virtual at 0
lpTest TestStruct
end virtual
您将此虚拟区域的起始地址设置为0
,因此lpTest
也将为零,lea eax, [lpTest]
相当于lea eax, [0]
(相当于{ {1}},你不想要这个)。但有一个诀窍:
mov eax, 0
现在virtual at esp
lpTest TestStruct
end virtual
的地址为lpTest
,esp
的地址将汇编为lea eax, [lpTest]
。
顺便说一句:lea eax, [esp]
相当于lea eax, [esp]
。