Как назначение для класса безопасности, я пытаюсь использовать __asm__("jmp 0xbffff994");
в своем коде, но когда я разбираю вещи в gdb, инструкция изменяется на jmp 0xc8047e2a
. Любая идея, почему и как я могу перейти к конкретному адресу?x86 перейти к адресу
ответ
Возможно, потому что это переход к относительному адресу, а компоновщик или загрузчик переместили ваш код. Попробуйте поместить адрес в переменную, а затем сделать:
jmp dword [var]
или в качестве альтернативы:
push 0xbffff994
ret
Daniel объясняет, почему ваш прыжок не тот, который вы запрограммировали. Он связан с объектными файлами и связыванием.
Если вы хотите перейти на конкретный адрес, лучше всего исправить прыжок с помощью отладчика или дизассемблера.
В моей системе (GCC версии 4.2.4, Ubuntu), это выглядит хорошо на disassmbley (инсайт) :
int main() { asm("jmp 0xbffff994"); return 0; };
результаты disassmbley (проницательность):
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
Я бы предположил, что этот дизассемблер показывает смещение jmp, а не его фактическую цель. (команда jmp принимает смещение относительно eip, когда вы даете ему 32-битный непосредственный операнд). –
Почему вы догадались? есть ли способ проверить это? он работает как графический интерфейс с GDB ниже. –
Или могло случиться так, что переезда нет. Однако, если вы сбрасываете коды операций с помощью сборки, вы сможете увидеть смещение. – Mark
Трудно определить точный адрес во время компиляции, вы пробовали использовать ярлыки? Гораздо чаще их использовать с jmp.
пример:
start:
jmp exit
exit:
ret
Я бы рекомендовал использовать шестнадцатеричный редактор и просто изменив значение, если это только один раз вещь.
- 1. Преобразовать x86 Ассамблеи Перейти к таблице C
- 2. Перейти к другому URL-адресу selenium C#
- 3. Перейти к байтовому адресу в vim?
- 4. WebDriverIO: Firefox не перейти к адресу, указанному
- 5. Перейти к определенному адресу в C
- 6. Перейти к URL-адресу не работает
- 7. Перейти к определенному адресу внутри вложенного html
- 8. Windows Phone 7 Перейти к URL-адресу
- 9. Перейти к URL-адресу, если значение null
- 10. Перейти к определенной строке на языке ассемблера x86
- 11. Перейти к другому URL-адресу, когда форма заполнена
- 12. перейти к новому URL-адресу в javascript, но перезагрузить?
- 13. Как перейти к link_to_remote динамическому URL-адресу в рельсах?
- 14. Как перейти к URL-адресу в JavaScript, используя if
- 15. PHP SDK, логин - перейти к адресу и разместить на стене
- 16. как перейти к URL-адресу с помощью linkbutton в gridview
- 17. Javascript/jQuery - Перейти к URL-адресу, основанному на выпадающих выделениях
- 18. Получить выделенный текст - и перейти к URL-адресу
- 19. Перейти к другому URL-адресу в браузере закрыть
- 20. Перейти к URL-адресу в цикле [несколько раз]
- 21. Как перейти к определенному URL-адресу, когда результат формы отличается?
- 22. Flash CreateJS перейти к URL-адресу при вводе последнего кадра
- 23. Использование Selenium IDE как перейти к URL-адресу
- 24. Перейти к URL-адресу после нажатия кнопки «ОК» в предупреждении
- 25. Перейти к URL-адресу при нажатии на геометрию лифлета
- 26. Перейти к URL-адресу после выбора опции в optgroup
- 27. Перейти к адресу после ветвления в петле в MIPS
- 28. как перейти к внешнему URL-адресу из турбогрев/вишневого приложения?
- 29. Как перейти к URL-адресу, наконец, нажав клавишу табуляции?
- 30. Как связать http.Client в Перейти к IP-адресу
Почему вам нужно перейти к необработанному адресу? Я с трудом понимаю любое возможное (не гнусное) использование для этого. – kquinn
Какую систему вы используете? –
@kquinn, независимо от того, задан вопрос, давайте попробуем ответить на него. – samoz