我编写了一些汇编器模块,并使用常量变量在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链接项目设置中与您的代码链接应该是微不足道的。