我是一个狂热的 ASM 作家。我正在尝试在 asm 中编写本机 java 代码。我遇到的问题是从 Java 传递的参数似乎没有被 asm 代码接收。C++ 代码似乎使用 windows 64 位调用约定来接收参数,即 rcx、rdx、r8、r9、stack,最初我认为它对于 asm 是相同的,但似乎并非如此。我花了很长时间寻找可能的解释和例子,但还没有找到,所以我想我会问。我会非常感谢一些帮助,以确定我哪里出错了。非常感谢。下面是解释我到目前为止开发的代码片段......
在 NativeInterface.java 中
public native static String test(int _number);
在 Calling.java 中
String s=NativeInterface.test(123);
在 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
asm中打开的对话框没有显示“123”而是显示“1918844240”以上代码成功将字符串传递给java。
看来我可以成功地将参数从 asm 传递给 java。此时我无法将参数从 java 传递给 asm。
我希望使用标准的 Windows 64 位调用约定,但似乎不是这样。我在任何地方都找不到任何文档。有人可以解释一下我在 asm 中应该期待什么吗?非常感谢。