Тема: Виклик по адресi = помилка "нарушение прав доступа".
Знайшов сорци мови pawn.
I на 32 бiтах все робить.
Але якщо перевести з 32 на 64 бiта то буде помилка (в назвi вона зазначена).
Було визначено що помилка викникала при виклику функций з pawn.
И тут делема:
Я переводив функцiю в поинтер и отримав число.
Потiм викликав функцию по тому поинтеру (все працювало).
Далi виводив число перед крашем i воно було таке саме як те по якому я успiшно викликав функцiю.
0_0
Може хто бачив таке i може пояснити чому воно крашить.
От як я викликав
AMX_NATIVE_CALL - _stdcall
typedef cell (AMX_NATIVE_CALL *AMX_NATIVE)(struct tagAMX *amx, const cell *params);
uint64_t add = n_printfs;
printf("address: %u\n", add);
((AMX_NATIVE)(add))(NULL, NULL);
Ну а вот кусочок де краш був:
printf("CALL %u\n", f);
*result = f(amx,params);
f то AMX_NATIVE.
Отримання f думаю не треба.
Бо адреса то правильна.
На x32 все робить.
PS: Ось лог
address: 2090547712
CALL 2090547712
Помилка:
Необработанное исключение по адресу 0x00000000064F3A00 в Test.exe: 0xC0000005: нарушение прав доступа при исполнении по адресу 0x00000000064F3A00.
Help please ^_^