J'essaie d'appeler NtReadVirtualMemory via un syscall dans asm. Je le fais pour différentes raisons, mais ce n'est pas important. Donc, je définit la fonction comme si dans mon fichier d'en-tête:C++ SysCall asm externals non résolus
extern "C" NTSTATUS SysWPM(HANDLE ProcessHandle, PVOID BaseAddress,
PVOID Buffer, ULONG NumberOfBytesToWrite, PULONG NumberOfBytesWritten);
Les paramètres sont corrects, je crois
J'ai ensuite créé un fichier ASM dans le projet. Je n'en sais assez que pour essayer de terminer cette tâche parce que c'est une toute petite partie. Supposément, vous n'avez pas besoin d'inclure ce fichier asm partout donc je l'ai laissé. La voici:
.code
SysWPM proc
mov r10, rcx
mov eac, 37h
syscall
ret
SysWPM endp
end
Maintenant, quand je compile, j'obtiens l'erreur externe non résolue. Je crois que c'est parce que j'ai besoin de le définir dans ce fichier ASM mais je ne suis pas sûr de savoir comment le faire. Qu'est-ce que je fais mal/que dois-je faire.
La pensée, il peut être utile de mentionner que je suis sous Windows 7 et l'indice de syscall réelle est 37 comme indiqué dans ce tableau:
Voici l'erreur exacte pour ceux qui demandent:
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
obtenir encore l'erreur avec la solution a commenté:
[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);
Pouvez-vous montrer l'erreur exacte de l'éditeur de liens? – Alden
De même, comment compilez-vous le fichier asm? – Alden
Ce n'est pas comme ça que vous le faites. Vous n'utilisez pas l'instruction 'syscall' dans votre propre code. Vous utilisez simplement un 'call' régulier à une fonction exportée par NtDll.dll. –