[英]Convert Extern C to Inline ASM
我有一个 C++ 项目,它调用位于 .asm (MASM) 文件中的 extern 函数。 有什么方法可以将 MASM 代码内联到 C++ 文件中,而不必使用单独的 .asm 文件?
.asm 文件
.data
.code
ZwReadVirtualMemory proc
mov r10, rcx
mov eax, 3Fh
syscall
ret
ZwReadVirtualMemory endp
end
这是C++文件
#include "stdafx.h"
#include <Windows.h>
#include <iostream>
using namespace std;
extern "C" NTSTATUS ZwReadVirtualMemory(HANDLE hProcess, void* lpBaseAddress, void* lpBuffer, SIZE_T nSize, SIZE_T* lpNumberOfBytesRead = NULL);
int main() {
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, 14648);
if (!hProcess)
return EXIT_FAILURE;
int intBuffer = 0;
void* lpBaseAddress = 0;
SIZE_T lpNumberOfBytesRead = 0;
NTSTATUS status = ZwReadVirtualMemory(hProcess, (PVOID)0x10ad0000, &intBuffer, sizeof(int), &lpNumberOfBytesRead);
cout << "ZwRVM returned " << dec << status << endl;
cout << "intBuffer = " << dec << intBuffer << endl;
cout << "lpNumberOfBytesRead = " << lpNumberOfBytesRead << endl;
cin.get();
}
某些 C/C++ 编译器支持非标准内联汇编块asm
或__asm__
。 它们可用于将部分汇编代码合并到常规函数或方法中。
您的代码示例明确指出使用 WinAPI(因此 Windows 作为目标平台)和 Visual Studio 作为编译器( stdafx.h
是最不可移植的部分)。 但是,Visual Studio 2010 和更高版本的更新停止支持 64 位目标的内联程序集: http : //msdn.microsoft.com/en-us/library/4ks26t93%28VS.100%29.aspx
您的选择:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.