我想通过系统调用在asm中调用NtReadVirtualMemory。我出于几个不同的原因这样做,但这不重要。所以我定义我的主头文件,像这样的功能:C++ SysCall asm未解决的外部问题
extern "C" NTSTATUS SysWPM(HANDLE ProcessHandle, PVOID BaseAddress,
PVOID Buffer, ULONG NumberOfBytesToWrite, PULONG NumberOfBytesWritten);
我相信这些参数是正确的
然后我在项目中创建一个ASM文件。我只知道尝试完成这项任务,因为它只是它的一小部分。据说你不需要在任何地方包含这个asm文件,所以我离开了。这里是:
.code
SysWPM proc
mov r10, rcx
mov eac, 37h
syscall
ret
SysWPM endp
end
但是,当我编译时,我得到了无法解析的外部错误。我相信这是因为我需要在这个ASM文件中定义它,但我不知道如何去做。我在做什么错了/我该怎么做。
想,这就是何况我在Windows 7和表所示实际的系统调用指数是37有用:
这里是为那些询问确切的错误:
1>Main.obj : error LNK2019: unresolved external symbol _SysWPM referenced in function _main
1>c:\users\Reece\documents\visual studio 2015\Projects\cs-ext\Debug\cs-ext.exe : fatal error LNK1120: 1 unresolved externals
仍然得到错误与评论的解决方案:
[email protected] proc
mov r10, rcx
mov eax, 37h ;
syscall
ret
[email protected] endp
extern "C" NTSTATUS NTAPI SysWPM(HANDLE ProcessHandle, PVOID BaseAddress,
PVOID Buffer, ULONG NumberOfBytesToWrite, PULONG NumberOfBytesWritten);
你能从链接器显示确切的错误吗? – Alden
另外,你如何编译asm文件? – Alden
这不是你如何做到的。您不要在自己的代码中使用“syscall”指令。您只需使用一个常规的'调用'来导出由NtDll.dll导出的函数。 –