3 votes

Comment écrire du code natif en ASM

Je suis un fervent rédacteur d'ASM. J'essaie d'écrire du code java natif en ASM. Le problème que je rencontre est que les paramètres passés depuis Java ne semblent pas être reçus par le code ASM. Le code C++ semble recevoir les paramètres en utilisant la convention d'appel de Windows 64 bits, c'est-à-dire rcx, rdx, r8, r9, stack, et j'ai d'abord supposé qu'il en serait de même pour l'asm, mais cela ne semble pas être le cas. J'ai passé un certain temps à chercher des explications et des exemples possibles, mais je n'en ai pas encore trouvé, alors j'ai pensé que je devais poser la question. J'apprécierais beaucoup que l'on m'aide à déterminer où je me trompe. Merci beaucoup. Voici des extraits de code expliquant ce que j'ai développé jusqu'à présent...

Dans NativeInterface.java

public native static String test(int _number);

Dans Calling.java

String s=NativeInterface.test(123);

Dans NativeJava.asm

.data
dString     db  "This is my string",0
.code
java_test PROC _iNumber:QWORD
 invoke dialog_showMessageInteger,"ASM CODE","Number=",_iNumber
 mov rax,rv(java_createStringUTF8,JNIenv,ADDR dString)
 ret
java_test ENDP

La boîte de dialogue ouverte en asm n'affiche pas "123" mais "1918844240". Le code ci-dessus transmet la chaîne de caractères à java avec succès.

Il semble que je puisse passer avec succès des paramètres à java à partir d'asm. Pour l'instant, je ne peux pas passer de paramètres à asm depuis java.

J'espérais que la convention d'appel standard de Windows 64 bits serait utilisée, mais il semble que ce ne soit pas le cas. Je ne trouve aucune documentation nulle part. Quelqu'un peut-il m'expliquer ce à quoi je dois m'attendre en asm ? Merci beaucoup, beaucoup.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X