Radare2“ pd”命令

问题描述 投票:0回答:1

我目前正在使用Radare2从PE文件中提取操作码。当前,我正在尝试使用API​​中的“ pd”命令:“ pd n @ offset:打印n个反汇编的操作码”。我想知道是否有一种方法可以精确计算/查找我处理的每个文件的“ n”。谢谢

radare2
1个回答
0
投票

环境

  • radare2: Radee2 4.2.0-git 23519 @ linux-x86-64 git.4.1.1-84-g0c46c3e1e commit:0c46c3e1e30bb272a5a05fc367d874af32b41fe4 build:2020-01-08__09:49:0
  • 系统: Ubuntu 18.04.3 LTS

SOLUTION] >>

此示例显示4个不同的选项,用于查看/打印反汇编或操作码。

  1. 通过可视模式在radare2中查看反汇编:

    • 命令一:aaaa#分析文件
    • 命令二:Vp#在可视模式下打开反汇编
  2. 打印r2或r2pipe中所有功能的反汇编:

  • 命令一:aaaa#分析文件
  • 命令二:pdf @@f > out
    • [pdf#打印功能的反汇编
    • @@f#对每个功能重复该命令
    • > out#将输出重定向到名为out
    • 的文件
  • 仅打印r2或r2pipe中的指令:

    • 命令一:aaaa#分析文件
    • 命令二:pif @@f ~[0] > out
      • [pif#函数的打印指令
      • @@f#对每个功能重复该命令
      • [~[0]#仅打印第一列(指令)
      • > out#将输出重定向到名为out
      • 的文件
  • 使用r2或r2pipe为每个操作码获取的详细信息:

    • 命令一:aaaa#分析文件
    • 命令二:aoj @@=`pid @@f ~[0]` > out
      • [aoj#以JSON显示操作码分析信息
      • [@@=#对子查询返回的每个偏移量重复此命令
      • pid @@f ~[0]#子查询
        1. [pid#使用偏移量和字节数进行打印反汇编
        2. @@f#对每个功能重复该命令
        3. [~[0]#仅打印第一列(偏移量)
      • > out#将输出重定向到名为out
      • 的文件

    示例

    用上面的任何选项在这里替换命令。

    使用radare2 shell的示例

    user@host:~$ r2 /bin/ls
    [0x00005850]> aaaa
    ...
    [0x00005850]> pdf @@f > out
    [0x00005850]> q
    user@host:~$ cat out
    ...
    ┌ 38: fcn.00014840 ();
    │           ; var int64_t var_38h @ rsp+0xffffffd0
    │           0x00014840      53             push rbx
    │           0x00014841      31f6           xor esi, esi
    │           0x00014843      31ff           xor edi, edi
    │           0x00014845      e846f2feff     call sym.imp.getcwd
    │           0x0001484a      4885c0         test rax, rax
    │           0x0001484d      4889c3         mov rbx, rax
    │       ┌─< 0x00014850      740e           je 0x14860
    │       │   ; CODE XREF from fcn.00014840 @ 0x14868
    │      ┌──> 0x00014852      4889d8         mov rax, rbx
    │      ╎│   0x00014855      5b             pop rbx
    │      ╎│   0x00014856      c3             ret
    ..
    │      ╎│   ; CODE XREF from fcn.00014840 @ 0x14850
    │      ╎└─> 0x00014860      e88beffeff     call sym.imp.__errno_location
    │      ╎    0x00014865      83380c         cmp dword [rax], 0xc
    │      └──< 0x00014868      75e8           jne 0x14852
    └           0x0001486a      e861feffff     call fcn.000146d0
                ; CALL XREFS from fcn.00013d00 @ 0x13d9d, 0x13da8
    ...
    

    使用带有r2pipe的Python的示例

    import r2pipe
    
    R2 = r2pipe.open('/bin/ls') # Open r2 with file
    R2.cmd('aaaa')              # Analyze file
    R2.cmd('pdf @@f > out')     # Write disassembly for each function to out file
    R2.quit()                   # Quit r2
        
    © www.soinside.com 2019 - 2024. All rights reserved.