我有一个C ++项目,它调用位于.asm(MASM)文件中的extern函数。有什么方法可以内联C ++文件中的MASM代码,而不必使用单独的.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();
}
答案 0 :(得分:0)
某些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
您的选择: