如何在 windows 上使用带有 C++ 的 x64 程序集?
How to use x64 assembly with C++ on windows?
cpp.cpp:
#include <iostream>
extern "C" int returnnum();
int main() { std::cout << returnnum() << "\n"; }
asm.asm:
segment .text
global _returnnum
_returnnum:
mov rax, 420
ret
首先,我用nasm -f win64 asm.asm
编译汇编文件。
然后,我用g++ cpp.cpp asm.obj
编译C++文件。
但这给了我一个错误:
asm.obj: file not recognized: File format not recognized
collect2.exe: error: ld returned 1 exit status
我知道我可以将 rax
更改为 eax
并使用 -f win32
进行编译,它会工作,但我想要一个 64 位应用程序。我有什么办法可以做到这一点吗?
如果这有帮助:
g++ --version
: g++ (MinGW.org GCC-6.3.0-1) 6.3.0
nasm --version
: NASM 版本 2.15rc12 2020 年 6 月 26 日编译
cpp.cpp:
#include <iostream>
extern "C" int returnnum();
int main() { std::cout << returnnum() << "\n"; }
asm.asm:
segment .text
global _returnnum
_returnnum:
mov rax, 420
ret
首先,我用nasm -f win64 asm.asm
编译汇编文件。
然后,我用g++ cpp.cpp asm.obj
编译C++文件。
但这给了我一个错误:
asm.obj: file not recognized: File format not recognized
collect2.exe: error: ld returned 1 exit status
我知道我可以将 rax
更改为 eax
并使用 -f win32
进行编译,它会工作,但我想要一个 64 位应用程序。我有什么办法可以做到这一点吗?
如果这有帮助:
g++ --version
: g++ (MinGW.org GCC-6.3.0-1) 6.3.0
nasm --version
: NASM 版本 2.15rc12 2020 年 6 月 26 日编译