C++系统调用未解决的外部问题

C++系统调用未解决的外部问题,c++,assembly,memory,ntdll,C++,Assembly,Memory,Ntdll,我正在尝试通过asm中的系统调用调用NtReadVirtualMemory。我这样做有几个不同的原因,但这并不重要。因此,我在主头文件中定义了如下函数: extern "C" NTSTATUS SysWPM(HANDLE ProcessHandle, PVOID BaseAddress, PVOID Buffer, ULONG NumberOfBytesToWrite, PULONG NumberOfBytesWritten); 我相信这些参数是正确的 然后我在项目中创建了一个ASM文件。我对

我正在尝试通过asm中的系统调用调用NtReadVirtualMemory。我这样做有几个不同的原因,但这并不重要。因此,我在主头文件中定义了如下函数:

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
仍在使用已注释的解决方案获取错误:

_SysWPM@20 proc

    mov r10, rcx
    mov eax, 37h ;
    syscall
    ret

_SysWPM@20 endp

extern "C" NTSTATUS NTAPI SysWPM(HANDLE ProcessHandle, PVOID BaseAddress,
PVOID Buffer, ULONG NumberOfBytesToWrite, PULONG NumberOfBytesWritten);

您需要将c/c++中的函数声明为

extern "C" NTSTATUS NTAPI SysWPM(HANDLE ProcessHandle, PVOID BaseAddress,
PVOID Buffer, ULONG NumberOfBytesToWrite, PULONG NumberOfBytesWritten);
这是stdcall函数

对于x86 ml/c/Cp code32.asm->code32.obj,在asm中

对于asm x64 ml64/c/Cp code64.asm->code64.obj


你能显示链接器的确切错误吗?还有,你是如何编译asm文件的?你不是这样做的。在自己的代码中不使用syscall指令。您只需使用对NtDll.dll导出的函数的常规调用。请确保从asm文件(例如PUBLIC SysWPM或SysWPM proc PUBLIC)导出该函数,并使用正确的命名约定。嗯。。。不需要。只需针对相应的库ntdll.lib和ntdllp.lib进行链接即可。此外,错误消息显示了链接器正在查找的确切符号。只需重命名你的ASM程序名。它是37或55,我将测试两者。我是按你说的那样说的,现在我还在听error@Reece什么错误?请准确-我无法查看此远程未解析的外部文件。我甚至不认为ASM文件正在编译到program@Reece未解析的外部-确切名称是什么!?!您是否理解需要显示此R10和rcx当然不是x86寄存器。
.686p

.MODEL flat

_TEXT segment

_SysWPM@20 proc
...
ret 20
_SysWPM@20 endp
_TEXT ends
end
_TEXT segment 
SysWPM proc

    ...
   ret
SysWPM endp


_TEXT ENDS

END