首先,我会直接回答你的问题:
- 第 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
.
使用更详细的命令
的替代方法afl
是afll
。它将以详细模式和易于理解的表格列出二进制文件的功能:
[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
列出了函数,但这次它向您显示了列的标题名称。