FASM无法将结构传递给函数

时间:2018-01-03 20:52:57

标签: assembly macros x86 structure fasm

我有一个像这样的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

如何通过引用正确传递此结构?

1 个答案:

答案 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 的地址为lpTestesp的地址将汇编为lea eax, [lpTest]

顺便说一句:lea eax, [esp]相当于lea eax, [esp]