Я хочу сделать мгновенный переход (чтобы улучшить производительность) вместо вызова новой функции или создания таблицы переходов. Я понятия не имею, почему этот код работает на моем компиляторе, но он не может правильно перейти:
__asm mov eax, __cmd
__asm jmp eax //Crash!
__cmd :
//Some code
Я попробовал второй метод, он также компилируется, но не работает:
int address = 10;
__asm jmp (__cmd + address) //Crash!
__cmd :
var += value;return;
var -= value;return;
var *= value;return;
var /= value;return;
var %= value;return;
Но это работает только с константами:
__asm jmp (__cmd + 10) //works
Почему происходит сбой моей программы при выполнении косвенного перехода? И есть ли способ решить эту проблему?
Спасибо Алексей Фрунзе. Я нашел ответ:
mov eax, offset __cmd
Это решило мою проблему. Теперь я могу косвенно реализовывать прыжки.
Спасибо за прочтение. 🙂
Других решений пока нет …