radare2 的 afl 显示的信息是什么?

逆向工程 工具 雷达2
2021-06-17 08:20:45

我无法弄清楚afl实际输出什么这些文档出人意料地缺乏信息。

所以,我在第一列有地址,在最后一列有符号。第 2、3 和 4 列是什么?

例子:

:> afl
0x08048000   29 988  -> 937  segment.LOAD0
0x080483dc    3 35           func_5
0x08048410    1 6            sym.imp.fgets
0x08048420    1 6            sym.imp.fclose
0x08048430    1 6            sym.imp.fwrite
0x08048440    1 6            sym.imp.puts
0x08048450    1 6            loc.imp.__gmon_start
0x08048460    1 6            sym.imp.exit
0x08048470    1 6            sym.imp.__libc_start_main
0x08048480    1 6            sym.imp.fopen
0x08048490    1 6            sym.imp.fileno
0x080484a0    1 6            sym.imp.ptrace
0x080484b0    1 33           entry0
0x080484e0    1 4            func_3
0x080484f0    4 42           func_4
0x08048642    4 51           func_1
0x08048675   10 83           func_2
0x080486c8    4 194          main
1个回答

首先,我会直接回答你的问题:

  • 第 2 列:函数基本块的数量
  • 第三列:函数的大小(以字节为单位)
  • 第 4 列:函数名称

您可能已经使用“4th”来发现“->”之后的数字。如果是这种情况,在有“->”的地方,左边的数字是函数范围,在右边你可以找到函数大小仅当范围和大小不同时才会发生。


但现在采用更通用的方法。正如您所注意到的,radare2 的某些命令不会向您显示表的列标题,就像您使用该afl命令的示例一样那么你能做些什么来显示这些信息呢?

使用 JSON 输出

简单地说,使用输出的 JSON 表示。大部分radare2 的信息性命令都可以附加aj 以将输出格式化为JSON。添加 ~{} 以使用 JSON 缩进格式化输出以提高可读性:

例如:

[0x00400430]> aflj~{}                   
[                                       
  {                                     
    "offset": 4195272,                  
    "name": "sym._init",                
    "size": 26,                         
    "realsz": 26,                       
    "cc": 2,                            
    "cost": 12,                         
    "nbbs": 3,                          
    "edges": 3,                         
    "ebbs": 1,                          
    "calltype": "amd64",                
    "type": "sym",                      
    "minbound": "4195272",              
    "maxbound": "4195298",              
    "range": "26",                      
    "diff": "NEW",    
    ...
    ...               

如您所见,radare 为我们提供了一个简单的 JSON 输出,其中包含每个值的标头(键)。您可以使用与输出相对应的标题名称轻松了解每列是什么,不带j.

使用更详细的命令

的替代方法aflafll它将以详细模式和易于理解的表格列出二进制文件的功能:

[0x00400430]> afll
address            size  nbbs edges    cc cost          min bound range max bound          calls locals args xref frame name
================== ==== ===== ===== ===== ==== ================== ===== ================== ===== ====== ==== ==== ===== ====
0x004003c8   26     3     3     2   12 0x004003c8    26 0x004003e2     1    0      0    1     8 sym._init
0x00400400    6     1     0     1    3 0x00400400     6 0x00400406     0    0      0    1     0 sym.imp.puts
0x00400410    6     1     0     1    3 0x00400410     6 0x00400416     0    0      0    1     0 sym.imp.__libc_start_main
0x00400420    6     1     0     1    3 0x00400420     6 0x00400426     0    0      0    1     0 sub.__gmon_start_420
0x00400430   41     1     0     1   15 0x00400430    41 0x00400459     1    0      0    0     8 entry0
0x00400460   41     4     4     2   20 0x00400460    50 0x00400492     0    0      0    1     8 sym.deregister_tm_clones
0x004004a0   53     3     2    -1   20 0x004004a0    53 0x004004d5     0    0      0    2     8 sym.register_tm_clones
0x004004e0   28     3     3     2   14 0x004004e0    28 0x004004fc     1    0      0    0     0 sym.__do_global_dtors_aux
0x00400500   35     4     6     4   19 0x00400500    38 0x00400526     0    0      0    0     8 entry1.init
0x00400526   21     1     0     1   12 0x00400526    21 0x0040053b     1    0      0    1     8 sym.main
0x00400540  101     4     5     3   49 0x00400540   101 0x004005a5     1    0      0    1    56 sym.__libc_csu_init
0x004005b0    2     1     0     1    3 0x004005b0     2 0x004005b2     0    0      0    1     0 sym.__libc_csu_fini
0x004005b4    9     1     0     1    5 0x004005b4     9 0x004005bd     0    0      0    0     8 sym._fini

afll 列出了函数,但这次它向您显示了列的标题名称。