这是我的汇编文件示例:
<
7c90e430: lea 0x10(%esp), %edi R@edi[0xd38e0500][4](W) T0 A@0x0012fd30[0x00000000][4](R) T0
7c90e434: popl %eax R@eax[0x0041771b][4](W) T0 M@0x0012fd20[0x7c901166][4](R) T0
7c90e435: calll %eax R@eax[0x7c901166][4](R) T0 M@0x0012fd20[0x7c901166][4](W) T0
7c901166: lea 0x10(%esp), %eax R@eax[0x7c901166][4](W) T0 A@0x0012fd30[0x00000000][4](R) T0
7c90116a: movl %eax, 0x4(%esp) M@0x0012fd24[0x00000000][4](W) T0 R@eax[0x0012fd30][4](R) T0
7c90116e: xor %ebp, %ebp R@ebp[0x00150748][4](RW) T0 R@ebp[0x00150748][4](R) T0
7c901170: jmp 0x7c91b057 J@0x00000000[0x00019ee7][4](R) T0
7c91b057: mov %edi, %edi R@edi[0x0012fd30][4](W) T0 R@edi[0x0012fd30][4](R) T0
7c91b059: pushl %ebp R@ebp[0x00000000][4](R) T0 M@0x0012fd1c[0x00000000][4](W) T0
7c91b05a: mov %esp, %ebp R@ebp[0x00000000][4](W) T0 R@esp[0x0012fd1c][4](R) T0
7c91b05c: cmpb q4312078qx0, 0x7c97b20c M@0x7c97b20c[0x00000000][1](R) T0 I@0x00000000[0x00000000][1](R) T0
7c91b063: jz 0x7c9226ed J@0x00000000[0x0000768a][4](R) T0
该文件是在沙箱中运行二进制文件后生成的,因此我不想将其转换为二进制文件并执行此过程。我知道所有现有工具都使用二进制文件,并且在有汇编文件并想要执行此过程的同时执行此过程。
#1 楼
大约20年前,我就该主题写过一篇文章。它的标题为“汇编语言控制流图”,并于1998年9月发行。它使用Perl解析汇编代码,以生成控制流程图的Postscript表示形式。然后可以通过任何可以渲染Postscript的东西打印或在屏幕上查看该图。它是为现在已经过时的8位微控制器编写的,但是该代码可以适用于任何指令集。它也可以很容易地适应于输出SVG。以这种汇编语言从简单冒泡排序中获得的样本输出如下所示:
左侧的数字表示原始
bubble.asm
文件中的行号。朝向底部的流量在垂直线的右侧。往顶部的流量在左侧。#2 楼
实际上,您有许多这样的工具。通常,您似乎需要的是所谓的二进制程序符号执行,该程序需要将汇编语言的语义转换为中间语言,然后将其传递给处理位向量逻辑公式的SMT求解器(通常为Z3)。但是请注意,并非所有工具都支持将其翻译成中间语言。以下是这些工具的一小部分(尽管并不详尽),以字典顺序给出(以避免任何偏见):
Amoco。
Angr。
二进制分析平台。
Bindead。
/>
BitBlaze(请参阅Fuzzball项目)。
Insight。
风筝。 /> Mayhem。
McSema。
Miasm2。
PathGrind。
PySymEmu。
S2E。
Triton。
...
如果我意识到忘记了一些,我会回到此列表。 />并且,关于获得汇编代码的事实,只需对其进行编译即可得到二进制文件。 :-)
评论
Tnx为您解答。据我所知,它们大多数仅使用二进制文件。由于某些研究原因,我不想编译二进制文件。这就是为什么我要寻找一种可以直接用于程序集而不是二进制文件的工具。
–本·理查兹(Ben Richards)
15年8月10日在17:18
至少Miasm2可以将汇编语言作为输入,并且可能还有许多其他语言...但是,您应该花更多的时间描述问题,而不仅仅是在此处添加四行,这样您可能会得到更多相关的答案。
–恐怖
15年8月10日在17:24
哪种工具最适合在Linux中从现有程序集中生成cfg?
–txs
18年3月28日在5:10