我编写了一些汇编器模块,并使用常量变量在FASM中定义它们的大小。

与FASM对象文件链接后,如何在VC++中使用这些变量?

例如,如果我的汇编代码是这样的:

start: //function declaration, exported
xor eax, eax
inc eax
retn
end_func:

大小为end_func - start
如何将end_func - start的大小导出到VC++?

最佳答案

您可以使用FASM一侧的public指令导出变量,然后使用extern将其导入到C++代码中。

这是一个简短的示例:

// --- test.asm ---
format MS COFF

public counter as '_counter'

section '.data' data readable writeable
counter dd 0x7DD

// --- example.cpp ---
#include <iostream>

extern "C" long int counter;

int main() {
    std::cout << "Hello " << ++counter << "!" << std::endl;
    return 0;
}

// --- Compile, Link and Run ---
> fasm test.asm
> cl /EHs example.cpp test.obj
> example.exe

// --- Output: ---
Hello 2014!

该示例出于说明目的直接在命令行上使用MSVC cl.exe编译器,但是在您的情况下,添加fasm .obj输出文件以在VS链接项目设置中与您的代码链接应该是微不足道的。

09-04 13:42