我目前正在使用 Radare2 从 PE 文件中提取操作码。目前,我正在尝试使用 API 中的“pd”命令:“pd n @ offset: Print n opcodes disassembled”。我想知道是否有一种方法可以计算/找出我处理的每个文件的“n”到底是什么。谢谢
环境
\n\n解决方案
\n\n此示例显示了 4 个不同的选项来查看/打印反汇编或操作码。
\n\n通过视觉模式查看radare2中的反汇编:
\n\naaaa#分析文件Vp# 以可视模式打开反汇编打印 r2 或 r2pipe 中所有函数的反汇编:
\n\naaaa#分析文件pdf @@f > out\n\npdf# 打印函数的反汇编@@f# 对每个函数重复该命令> out# 将输出重定向到名为out的文件仅打印 r2 或 r2pipe 中的指令:
\n\naaaa#分析文件pif @@f ~[0] > out\n\npif# 打印函数的指令@@f# 对每个函数重复该命令~[0]# 只打印第一列(指令)> out# 将输出重定向到名为out的文件使用 r2 或 r2pipe 获取每个操作码的详细信息:
\n\naaaa# 分析文件aoj @@=`pid @@f ~[0]` > out\n\naoj# 显示JSON格式的操作码分析信息@@=# 对子查询返回的每个偏移量重复该命令pid @@f ~[0]# 子查询\n\npid# 打印带有偏移量和字节的反汇编@@f# 对每个函数重复该命令~[0]# 只打印第一列(偏移量)> out# 将输出重定向到名为out的文件例子
\n\n将此处的命令替换为上面的任何选项。
\n\n使用radare2 shell的示例
\n\nuser@host:~$ r2 /bin/ls\n[0x00005850]> aaaa\n...\n[0x00005850]> pdf @@f > out\n[0x00005850]> q\nuser@host:~$ cat out\n...\n\xe2\x94\x8c 38: fcn.00014840 ();\n\xe2\x94\x82 ; var int64_t var_38h @ rsp+0xffffffd0\n\xe2\x94\x82 0x00014840 53 push rbx\n\xe2\x94\x82 0x00014841 31f6 xor esi, esi\n\xe2\x94\x82 0x00014843 31ff xor edi, edi\n\xe2\x94\x82 0x00014845 e846f2feff call sym.imp.getcwd\n\xe2\x94\x82 0x0001484a 4885c0 test rax, rax\n\xe2\x94\x82 0x0001484d 4889c3 mov rbx, rax\n\xe2\x94\x82 \xe2\x94\x8c\xe2\x94\x80< 0x00014850 740e je 0x14860\n\xe2\x94\x82 \xe2\x94\x82 ; CODE XREF from fcn.00014840 @ 0x14868\n\xe2\x94\x82 \xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80> 0x00014852 4889d8 mov rax, rbx\n\xe2\x94\x82 \xe2\x95\x8e\xe2\x94\x82 0x00014855 5b pop rbx\n\xe2\x94\x82 \xe2\x95\x8e\xe2\x94\x82 0x00014856 c3 ret\n..\n\xe2\x94\x82 \xe2\x95\x8e\xe2\x94\x82 ; CODE XREF from fcn.00014840 @ 0x14850\n\xe2\x94\x82 \xe2\x95\x8e\xe2\x94\x94\xe2\x94\x80> 0x00014860 e88beffeff call sym.imp.__errno_location\n\xe2\x94\x82 \xe2\x95\x8e 0x00014865 83380c cmp dword [rax], 0xc\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80< 0x00014868 75e8 jne 0x14852\n\xe2\x94\x94 0x0001486a e861feffff call fcn.000146d0\n ; CALL XREFS from fcn.00013d00 @ 0x13d9d, 0x13da8\n...\nRun Code Online (Sandbox Code Playgroud)\n\n将 Python 与 r2pipe 结合使用的示例
\n\nimport r2pipe\n\nR2 = r2pipe.open(\'/bin/ls\') # Open r2 with file\nR2.cmd(\'aaaa\') # Analyze file\nR2.cmd(\'pdf @@f > out\') # Write disassembly for each function to out file\nR2.quit() # Quit r2\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
2061 次 |
| 最近记录: |