作为一个安全类的任务,我试图在我的代码中使用__asm__("jmp 0xbffff994");
,但是当我在gdb中反汇编时,指令更改为jmp 0xc8047e2a
。 任何想法为什么以及如何跳转到特定的地址?x86跳转到地址
Q
x86跳转到地址
6
A
回答
18
可能是因为它跳转到相对地址,并且链接器或装入器已移动您的代码。尝试把地址转换成一个变量,然后执行:
jmp dword [var]
或者:
push 0xbffff994
ret
0
丹尼尔解释为什么你的跳跃与你编程的不一样。它与对象文件和链接有关。
如果你想跳转到一个特定的地址,最好使用调试器或反汇编器修补跳转。
0
在我的系统(gcc版本4.2.4,Ubuntu的)这个看起来不错的disassmbley(洞察力) :
的disassmbley的int main() { asm("jmp 0xbffff994"); return 0; };
结果(洞察力):
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
0
编译时很难确定确切的地址,你试过使用标签吗?在jmp中使用它们更为常见。
例如:
start:
jmp exit
exit:
ret
0
我会建议使用十六进制编辑器和简单的改变值,如果它只是一个一次性的事情。
相关问题
- 1. 重点跳转到地址
- 2. gdb:findind每跳转一个地址
- 3. 如何找到跳转到特定地址
- 4. 谷歌地图跳转到
- 5. x86-64和远程调用/跳转
- 6. Chrome扩展程序跳转到网址
- 7. x86汇编寄存器地址
- 8. MAC地址到IP转换
- 9. IDA Pro跳转到从基地偏移
- 10. x86寻址模式
- 11. “无效内存地址”调用时从Python跳转
- 12. 为什么引用堆栈地址的ESP每次跳转4h?
- 13. 虚拟地址到物理地址的转换
- 14. 转换[NSNetservice地址]到IP地址的字符串
- 15. 转换逻辑(虚拟)地址到物理地址
- 16. llvm可以发出跳转到函数中给定地址的代码吗?
- 17. Eclipse跳过代理IP地址
- 18. MIPS如何转移到32位地址?
- 19. 从C#转印Ip地址到UINT32
- 20. C#到Java跳转
- 21. ScrollView跳转到EditText
- 22. 跳转到功能
- 23. ASM:向x86-64二进制文件写入跳转命令
- 24. x86汇编寄存器和mov指令,并跳转抵消
- 25. 如何修改用于条件跳转的x86汇编标志?
- 26. 在perl的MAC地址到IPv6链接本地地址在线转换
- 27. 跳到内部链接而不更改地址栏?
- 28. Google Maps API - 获取地址到地址
- 29. 物理地址到IP地址
- 30. Windows开发:x86到x64转换
为什么你需要跳转到一个原始地址?我很难理解任何可能的(非恶意的)用法。 – kquinn 2009-04-21 23:33:50
你使用什么系统? – 2009-04-21 23:36:58
@kquinn不管,他的问题已被问到,让我们试着回答它。 – samoz 2009-04-21 23:41:08