为了提高开发和调试效率,可以使用NDB的.readmem命令来将主机上编译好的程序模块通过调试会话加载到目标机。
基本步骤如下:

1. 执行.readmem命令

比如: .readmem f:\gem3.elf 0x0`eb1d11d0 L0

上述命令是将gem3.elf加载目标系统的0x0`eb1d11d0位置。地址中的小撇是重音符号,用于分隔64位数的高32位和低32位。

最后一个参数L0用于指定内存区的长度,0代表使用文件程度,也就是加载整个文件。
如果指定了非0的内存长度(MemLen),那么规则如下:

  • 如果MemLen > FileLen,那么多余内存区会被填充0
  • 如果MemLen < FileLen,那么只读文件的部分内容

使用d或者u命令检查加载结果

比如db 0x0`eb1d11d0

db 0x0`eb1d11d0
00000000`eb1d11d0  7f 45 4c 46 01 01 01 00-00 00 00 00 00 00 00 00  .ELF............
00000000`eb1d11e0  02 00 28 00 01 00 00 00-b9 0a 00 08 34 00 00 00  ..(.........4...
00000000`eb1d11f0  6c 42 07 00 00 02 00 05-34 00 20 00 02 00 28 00  lB......4. ...(.
00000000`eb1d1200  18 00 17 00 01 00 00 00-00 00 01 00 00 00 00 08  ................
00000000`eb1d1210  00 00 00 08 a8 1c 00 00-a8 1c 00 00 07 00 00 00  ................
00000000`eb1d1220  00 00 01 00 01 00 00 00-00 00 02 00 00 00 00 20  ...............
00000000`eb1d1230  a8 1c 00 08 7c 00 00 00-b0 06 00 00 06 00 00 00  ....|...........
00000000`eb1d1240  00 00 01 00 00 00 00 00-00 00 00 00 00 00 00 00  ................

使用r pc=xx命令跳转到执行入口

不带参数的r命令可以观察当前寄存器的值

r
 x0=0x00000000eb1d1250  x1=0x0000000000000000  x2=0x000000000000000a  x3=0x0000000000000010
 x4=0x0000000000000010  x5=0x00000000ffffffff  x6=0x0000000000000021  x7=0x00000000ed734d30
 x8=0x0000000008000032  x9=0x00000000efff0000 x10=0x000000000000023f x11=0x0000000000000008
x12=0x000000000000023f x13=0x0000000000000000 x14=0x0000000000000000 x15=0x0000000000000000
x16=0x0000000000000000 x17=0x0000000000000000 x18=0x00000000eb1ffce0 x19=0x0000000000000000
x20=0x0000000000000000 x21=0x0000000000000000 x22=0x0000000000000000 x23=0x0000000000000000
x24=0x0000000000000000 x25=0x0000000000000000 x26=0x0000000000000000 x27=0x0000000000000000
x28=0x0000000000000000  fp=0x00000000eb1d11d0  lr=0x00000000ed6fb760  sp=0x00000000eb1d11d0
 pc=0x00000000ed55ea00 pstate=0x0000000060000209 - Z C - - - - - - D - - - EL2
ed55ea00 a9bf7bfd stp   x29, x30, [sp, #-0x10]!

使用r pc=xx命令可以修改pc寄存器的值
修改后,使用g命令恢复目标系统执行

作者:Zhang Yinkui  创建时间:2025-08-04 18:19
最后编辑:Zhang Yinkui  更新时间:2025-08-06 11:03