2017-01-23 5 views
-1

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:

table

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); 
+0

Pouvez-vous montrer l'erreur exacte de l'éditeur de liens? – Alden

+0

De même, comment compilez-vous le fichier asm? – Alden

+0

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. –

Répondre

1

vous devez déclarer la fonction en c/C++ comme

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

c'est __stdcall fonction

et asm pour x86 (ml /c /Cp code32.asm ->code32.obj)

.686p 

.MODEL flat 

_TEXT segment 

[email protected] proc 
... 
ret 20 
[email protected] endp 
_TEXT ends 
end 

pour asm x64 (ml64 /c /Cp code64.asm ->code64.obj)

_TEXT segment 
SysWPM proc 

    ... 
    ret 
SysWPM endp 


_TEXT ENDS 

END 
+0

Il est soit 37 ou 55 je vais tester les deux. J'ai déclaré comment vous avez dit et je reçois toujours l'erreur – Reece

+0

@Reece quelle erreur? s'il vous plaît exactement - Je ne peux pas voir cette télécommande – RbMm

+0

Non résolue externe. Je ne pense même pas que le fichier ASM est compilé dans le programme – Reece