Вы можете попробовать использовать row_number()
select * from
(
select *,row_number() over(partition by cust_id order id desc) rn from tablename
)A where rn=1
Возможно, потому что это переход на относительный адрес, а компоновщик или загрузчик переместили ваш код. Попробуйте поместить адрес в переменную, а затем выполните:
jmp dword [var]
или, альтернативно:
push 0xbffff994
ret
Даниэль Объясняет, почему ваш прыжок не тот, который вы запрограммировали. Это связано с объектными файлами и связыванием.
Если вы хотите перейти к определенному адресу, лучше всего пропатчить переход, используя отладчик или дизассемблер.
Трудно определить точный адрес во время компиляции, пробовали ли вы использовать метки? Гораздо более распространено использовать их с jmp.
пример:
start:
jmp exit
exit:
ret
Я бы порекомендовал использовать шестнадцатеричный редактор и просто изменить значение, если это только одноразовая вещь.
В моей системе (gcc версии 4.2.4, Ubuntu) это выглядит нормально на дизассемблере ( Insight):
int main() { asm("jmp 0xbffff994"); return 0; };
результаты дизассемблирования (Insight):
0x8048344 : lea 0x4(%esp),%ecx - 0x8048348 : and $0xfffffff0,%esp - 0x804834b : pushl -0x4(%ecx) - 0x804834e : push %ebp - 0x804834f : mov %esp,%ebp - 0x8048351 : push %ecx - 0x8048352 : jmp 0xbffff994 - 0x8048357 : mov $0x0,%eax - 0x804835c : pop %ecx - 0x804835d : pop %ebp - 0x804835e : lea -0x4(%ecx),%esp - 0x8048361 : ret