Radare2 "pd" 命令
Radare2 "pd" command
我目前正在使用 Radare2 从 PE 文件中提取操作码。目前,我正在尝试使用来自 API: "pd n @ offset: Print n opcodes disassembled" 的 "pd" 命令。我想知道是否有办法 calculate/find 准确地找出我处理的每个文件的 "n" 是什么。谢谢
环境
- radare2:radare2 4.2.0-git23519@linux-x86-64git.4.1.1-84- g0c46c3e1e 提交:0c46c3e1e30bb272a5a05fc367d874af32b41fe4 构建:2020-01-08__09:49:0
- 系统: Ubuntu 18.04.3 LTS
解决方案
此示例显示了 4 个不同的选项来查看/打印反汇编或操作码。
radare2可视化查看反汇编:
- 命令一:
aaaa
# 分析文件
- 命令二:
Vp
# 以可视模式打开反汇编
打印 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 中的opcode分析信息
@@=
# 通过子查询 对每个偏移return重复命令
pid @@f ~[0]
# 子查询
pid
# 打印带偏移量和字节的反汇编
@@f
# 对每个函数重复命令
~[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
...
使用 Python 和 r2pipe
的示例
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
我目前正在使用 Radare2 从 PE 文件中提取操作码。目前,我正在尝试使用来自 API: "pd n @ offset: Print n opcodes disassembled" 的 "pd" 命令。我想知道是否有办法 calculate/find 准确地找出我处理的每个文件的 "n" 是什么。谢谢
环境
- radare2:radare2 4.2.0-git23519@linux-x86-64git.4.1.1-84- g0c46c3e1e 提交:0c46c3e1e30bb272a5a05fc367d874af32b41fe4 构建:2020-01-08__09:49:0
- 系统: Ubuntu 18.04.3 LTS
解决方案
此示例显示了 4 个不同的选项来查看/打印反汇编或操作码。
radare2可视化查看反汇编:
- 命令一:
aaaa
# 分析文件 - 命令二:
Vp
# 以可视模式打开反汇编
- 命令一:
打印 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 中的opcode分析信息
@@=
# 通过子查询 对每个偏移return重复命令
pid @@f ~[0]
# 子查询pid
# 打印带偏移量和字节的反汇编@@f
# 对每个函数重复命令~[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
...
使用 Python 和 r2pipe
的示例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