(我在Debian 7,arm64)
为了强制vmware-networks输出日志而不是转储日志,我想修改日志记录功能。在我的Windows机器上使用IDA,我在.text:0000000000068900 jz loc_689A4
找到了指令。
运行gdb /usr/bin/vmware-networks
时,会出现指令:
(gdb) x 0x68900
0x68900: 0x009e840f
(gdb) x/i 0x68900
0x68900: je 0x689a4
但是当试图断点时,我得到了
(gdb) break *0x68900
Breakpoint 1 at 0x68900
(gdb) run --start
Starting program: /usr/bin/vmware-networks --start
Warning:
Cannot insert breakpoint 1.
Error accessing memory address 0x68900: Input/output error.
在尝试热线连接指令然后进行"运行"时,我得到了 (gdb)设置* 0x68900 = 0x009e850f 无法访问地址0x68900
的内存为什么会这样,我该如何解决?是的,我在root上运行,所以(通常)不应该有任何问题。
答案 0 :(得分:0)
问题是这个二进制文件是可重定位的。 break main
后跟run
会为您提供旧的main
位置以及重新定位的位置:
(gdb) break main
Breakpoint 1 at 0x1e990
(gdb) run --start
Starting program: /usr/bin/vmware-networks --start
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Breakpoint 1, 0x00007ffff7f1a990 in main ()
=>瞧,我们的重定位偏移量为0x7FFFF7EFC000。将其添加到任何“旧”偏移量,并且您有重新定位的偏移量用于检查,编辑等:
(gdb) x/i 0x7FFFF7F64900
0x7ffff7f64900: je 0x7ffff7f649a4
在IDA中重新定位整个二进制文件,以便在那里获得正确的偏移量,如果你愿意,你也可以在那里完成。