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.