在 Radare2 中使用 16 位偏移量和段

逆向工程 雷达2
2021-06-20 11:41:48

我有一个简单的 DOS COM 程序,我想使用 Radare2 对其进行分析:

  USE16
  ORG 100h

  mov ax, cs
  dec ax
  mov ds, ax

  mov dx, message+10h
  mov ah, 9
  int 21h
  ret

message:   db "Hello there!$"

(使用yasmecho "jMhIjti6HQG0Cc0hw0hlbGxvIHRoZXJlISQ=" | base64 -d > test.com将其编译为二进制文件。)

当我使用r2 -b16 test.comradare加载二进制文件时显示我在0000:0000.

我怎么能告诉radare实际的程序地址应该是0000:0100

另外我怎么能告诉radare加载到dx寄存器中的偏移量指向message换句话说,我可以dx使用从 开始的段来告诉radare这是一个偏移量0000:0100 - 0x10吗?

1个回答

您可以使用-m 0x100在特定地址加载二进制文件,如r2 -h输出所示:

-m [addr] 给定地址的映射文件 (loadaddr)

所以你可以做这样的事情:

$ r2 -m 0x100 -b 16 test.com

[0000:0100]> aa
[x] Analyze all flags starting with sym. and entry0 (aa)
[0000:0100]> pdf
╭ (fcn) fcn.00000100 13
│   fcn.00000100 ();
│           0000:0100      8cc8           mov ax, cs
│           0000:0102      48             dec ax
│           0000:0103      8ed8           mov ds, ax
│           0000:0105      ba1d01         mov dx, 0x11d                ; 285
│           0000:0108      b409           mov ah, 9
│           0000:010a      cd21           int 0x21                     ; '!'
╰           0000:010c      c3             ret

关于你的第二个问题,解释为的字节mov dx, 0x11dba1d01. 如您所见,0x01d1 是硬编码的,因此 r2 不会添加message +到其中。

您可以使用创建标志,f str.message 13 @ 0x10d但它可能对您的情况没有帮助。