【问题标题】:FASM cannot pass structure to functionFASM 无法将结构传递给函数
【发布时间】:2018-01-03 20:52:57
【问题描述】:

我在 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 中的 this 相同:

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

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

【问题讨论】:

    标签: assembly macros x86 structure fasm


    【解决方案1】:

    virtual at 0
      lpTest TestStruct
    end virtual
    

    你将这个虚拟区域的起始地址设置为0,所以lpTest也将为零,lea eax, [lpTest]相当于lea eax, [0](相当于mov eax, 0,你不想要这个)。不过有个窍门:

    virtual at esp
      lpTest TestStruct
    end virtual
    

    现在lpTest的地址是esplea eax, [lpTest]会被编译成lea eax, [esp]

    顺便说一句:lea eax, [esp] 等价于mov eax, esp

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-09
      • 1970-01-01
      • 2013-10-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多