0

(我在 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) set *0x68900= 0x009e850f Cannot access memory at address 0x68900

为什么会这样,我该如何解决?是的,我在 root 上运行,所以(通常)不应该有任何问题。

4

1 回答 1

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 中重新定位整个二进制文件,以便在那里获得适当的偏移量,如果你愿意的话,你也可以在那里完成。

于 2013-01-01T18:08:06.550 回答