Хочу написать взаимодействие jni и fasm на x64 битной архитектуре и возникла небольшая проблема.
JNIEXPORT jint JNICALL Java_t_TeastJNI_sum
(JNIEnv *, jclass, jint, jint);
Попытался решить проблему в лоб, возвращал параметры через eax или через rax, но dll возвращал только какое-то рандомное число:
Java_t_TestJNI_sum:
mov rax, [rsp+24] ; пропускаем 2 параметра
add rax, [rsp+32]
ret 32
Может я неправильно понял параметры stdcall?
Можно реализацию не только на FASM, на любом ASM x86-64.
UPD0
Полностью dll выглядит так:
format PE64 condole dll
include '%fasminc%\win64a.inc'
entry DllStart
section '.text' code readable executable
proc DllStart hinstDll,fdwReason,lpvReserved
mov eax,TRUE
ret
endp
Java_t_TestJNI_sum:
mov rax,[R8]
add rax,[R9]
ret
section '.edata' expirt data readable
export 'mydll.dlll',\
Java_t_TestJNI_sum,'Java_t_TestJNI_sum'
Метод java всё тот же, но возникла ошибка:
EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=******* и т.д.
Problematic frame:
C [mydll.dll+0x1000]
UPD1 Исправил как еаписали здесь, но: format PE64 console dll
include '%fasminc%\WIN64A.INC'
section '.text' code readable executable
proc Java_t_TestJNI_sum
mov rax, r8
add rax, r9
ret
endp
section '.edata' export data readable
export 'mydll.dll',\
Java_t_TestJNI_sum, 'Java_t_TestJNI_sum'
section '.reloc' fixups data discardable
if $=$$
dd 0,8
end if
Ошибка UnsatisfiedLinkError: Попытка обращения к неверному адресу
Ошибка возникает всегда, но при удалении секции .reloc ошибка возникает рандомно, а иногда всё хорошо. Если в секции .reloc сделать так:
dd 0,64
Что выделяет больше места для секции, насколько я понимаю, то ошибка исчезает полностью.
Куда пропала ошибка, и не прячется ли она, чтобы снова рандомно вылезти когда не нужно? Не зависит ли теперь код от "фазы луны"? (Чего-то непонятного в x86-64, исключая: ошибки в самих процессорах этого семейства, баги windows, запуска кода в неподдерживающих код средах).
UPD2 вопрос закрыт, можно ещё просто в конце edata написать вместо reloc:
data fixups
end data
В вашем коде множество опечаток и бездумного копирования из разных источников.
format PE64 console dll
include '%fasminc%\WIN64A.INC'
section '.text' code readable executable
proc Java_t_TestJNI_sum
mov rax, r8
add rax, r9
ret
endp
section '.edata' export data readable
export 'mydll.dll',\
Java_t_TestJNI_sum, 'Java_t_TestJNI_sum'
section '.reloc' fixups data discardable
if $=$$
dd 0, 64 ; if there are no fixups, generate dummy entry
end if
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Подскажите, как с помощью CSS, при наведении курсора, заменить цвет PNG-иконки (например, такой: ) с серого на красный
Вывожу на страницу элементы списка под соответствующими заголовками, но столкнулся с тем, что при команде margin отступ идет не от края страницы...
Всем привет подскажите как правильно избавится от вложенности subscribe в angular 6
Возникла проблема в отображении объектов на картеЕсть города, в городах филиалы, филиалы разбиваются на объекты, а объекты на авто