我想通過系統調用在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導出的函數。 –