сборка — C ++ SysCall asm неразрешенные внешние

Я пытаюсь вызвать NtReadVirtualMemory через системный вызов в 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

Все еще получаю ошибку с закомментированным решением:

_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);

-1

Решение

вам нужно объявить функцию в c / c ++ как

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

это __stdcall функция

И в asm за x86 (ml /c /Cp code32.asm -> code32.obj)

.686p

.MODEL flat

_TEXT segment

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

за asm х64 (ml64 /c /Cp code64.asm -> code64.obj)

_TEXT segment
SysWPM proc

...
ret
SysWPM endp_TEXT ENDS

END
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]