私たちは、このスレッドも What's the calling convention for the Java code in Linux platform? そしてそれはsolaris/linuxでJNIメソッドのJNIEnvを渡すために使用されたレジスタは?
は、「あなたはJavaの呼び出し規約がC呼び出し規則に似ていることに気づくことが説明したが、右。これはに意図的に行われている1つの引数でシフトし、次の呼び出し会話を知っていますJNIメソッドを呼び出すときに余分なレジスタのシャッフルを避けてください(JNIメソッドはメソッドのパラメータの前に余分なJNIEnv *引数を持っています)。
これは、jclass FindClass(JNIEnv * env、const char * name)などのJNI関数を呼び出したときの意味です。 JNIEnvの値envがrdiに渡され、名前がrsiに渡されますが、void printClassName(int Integer1、Object obj)など一般的な非JNI Javaメソッドを呼び出すと、Integer1がrsiに渡され、objがIntegerではないのでスタックに渡されますが、それは正しいでしょうか?
私が間違っている場合は私を修正してください。
|-------------------------------------------------------|
| c_rarg0 c_rarg1 c_rarg2 c_rarg3 c_rarg4 c_rarg5 |
|-------------------------------------------------------|
| rcx rdx r8 r9 rdi* rsi* | windows (* not a c_rarg)
| rdi rsi rdx rcx r8 r9 | solaris/linux
|-------------------------------------------------------|
| j_rarg5 j_rarg0 j_rarg1 j_rarg2 j_rarg3 j_rarg4 |
|-------------------------------------------------------|
あなたが解決しようとしている問題は何ですか? –
デバッグの知識を調べる。 –