Мы знаем следующее призывающих бесед эта тема, What's the calling convention for the Java code in Linux platform? А также пояснила, что, который используется для передачи методов JNIEnv для JNI в Solaris/linux?
«Вы можете заметить, что Java соглашение о вызовах похоже на C соглашение о вызовах, но сдвинутая на один аргумент правильно. Это делается намеренно избегайте повторного перетасовки реестра при вызове методов JNI (знаете, методы JNI имеют дополнительный аргумент JNIEnv *, добавленный к параметрам метода). "
Значит ли это, когда мы вызывали функцию JNI, такую как jclass FindClass (JNIEnv * env, const char * name); то значение JNIEnv env будет передано в rdi, а имя передано в rsi, однако, когда мы вызываем общий метод JNI Java, такой как void printClassName (int Integer1, Object obj), тогда Integer1 передается в rsi, а obj - передан в стек, поскольку он не является Целочисленным, это правильно?
, пожалуйста, исправьте меня, если я ошибаюсь.
|-------------------------------------------------------|
| 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 |
|-------------------------------------------------------|
В чем проблема, которую вы пытаетесь решить? –
Изучить знания отладки. –