汇编
汇编可以将人类可读的计算机指令(助记符)转化为一串可在机器上直接执行的字节。
Radare2中汇编器和反汇编器的逻辑实现于rasm* API,可以在命令行里用pa
和pad
命令使用它们,也可以通过rasm2
调用这些功能。
Rasm2可以快速地获取给定机器指令对应的十六进制字节串,便于复制粘贴。下面的例子展示了如何将x86/32上的mov指令进行汇编为机器码。
除了将指令作为rasm
命令的参数输入之外,还可以通过pipe管道传入:
正如所见那样,rasm2可以汇编一条或多条指令。若要在一行命令中汇编多条指令,需要用分号;
分隔指令,不过你也可以选择直接从文件中读取汇编指令,文件中只需遵循通常的nasm/gas/..语法。若想了解更多信息,可以查看rasm2的man手册页面。
pa
和pad
是print的子命令,代表仅打印汇编/反汇编。若想要将指令写入则需要使用wa
或wx
命令,后接对应的汇编字符串或字节。
汇编器能理解如下的语言及语法风格: x86
(Intel and AT&T variants), olly
(OllyDBG syntax), powerpc
(PowerPC), arm
and java
. 对于Intel语法,rasm2模仿了NASM和GAS的做法。
在rasm2的源码目录下有多个例子,通过它们可以了解如何根据rasm2描述法,汇编出原始二进制文件。
首先我们创建一个名为selfstop.rasm
的汇编文件:
将其汇编并在r2中分析:
可视化模式
在radare2可视化模式下同样可以进行汇编,按下A
键可以在当前偏移量处插入汇编语句。 最酷的是在可视化模式下,按下回车之前进行的汇编写入操作都是在内存中完成的。因此在保存修改之前我们可以检查代码块的大小以及是否有哪个指令会产生代码覆盖。
最后更新于
这有帮助吗?