📕
Radare2手册
  • 简介
  • 历史
  • Radare2框架
  • 下载radare2
  • 编译与可移植性
  • Compilation on Windows
  • Compilation on Android
  • 用户界面
  • 快速上手
    • 命令行选项
    • 命令格式
    • 表达式
    • 基本的debug操作
    • Contributing to radare2
  • 配置
    • Colors
    • 配置项
    • radare2相关文件
  • 基本命令
    • 定位
    • 块大小
    • 节区
    • 映射文件
    • 输出模式
    • 标记符(Flags)
    • 写入数据
    • Zoom模式
    • 复制/粘贴
    • 字节比较
    • SDB
    • Dietline
  • 可视化模式
    • 反汇编界面
    • 汇编界面
    • 变量编辑器界面
    • 可视化面板
  • 搜索字节
    • 基本的搜索用法
    • 配置搜索引擎
    • 搜索重复字节序列
    • 搜索中的自动化
    • 回溯搜索
    • 搜索汇编指令
    • Searching for AES Keys
  • 反汇编
    • 为反汇编添加元数据
    • ESIL
  • 分析
    • 代码分析
    • 变量
    • 类型
    • 调用约定
    • 虚函数表
    • 系统调用
    • 模拟执行
    • Symbols 信息
    • 函数签名
    • 图形化命令
  • 脚本化
    • 循环(Loops)
    • 宏(Macros)
    • R2pipe
  • 调试器
    • 入门
    • 从ida, GDB 或 WinDBG迁移到radare2
    • 寄存器(Registers)
    • 内存映射(Memory Maps)
    • 堆(Heap)
    • 文件(Files)
    • 反向调试
    • Windows消息(Messages)
  • 远程访问
    • 远程GDB调试
    • 远程WinDbg
  • 命令行工具
    • Rax2
    • Rafind2
    • Rarun2
    • Rabin2
      • 文件信息识别
      • 入口点(EP)
      • 导入(Imports)
      • 导出(Exports)
      • Symbols (exports)
      • 库文件
      • 字符串(String)
      • 节区(Sections)
    • Radiff2
      • 二进制文件比较
    • Rasm2
      • 汇编
      • 反汇编
      • 配置项
    • Ragg2
      • Language
    • Rahash2
      • Rahash Tool
  • 插件
    • IO 插件
    • Asm 插件
    • Analysis 插件
    • Bin 插件
    • 其它插件
    • Python插件
    • 对插件进行调试
    • 测试
    • 打包
  • Crackmes
    • IOLI
      • IOLI 0x00
      • IOLI 0x01
    • Avatao R3v3rs3 4
      • .radare2
      • .first_steps
      • .main
      • .vmloop
      • .instructionset
      • .bytecode
      • .outro
  • Reference Card
  • Acknowledgments
由 GitBook 提供支持
在本页

这有帮助吗?

  1. 命令行工具
  2. Rasm2

汇编

汇编可以将人类可读的计算机指令(助记符)转化为一串可在机器上直接执行的字节。

Radare2中汇编器和反汇编器的逻辑实现于rasm* API,可以在命令行里用pa和pad命令使用它们,也可以通过rasm2调用这些功能。

Rasm2可以快速地获取给定机器指令对应的十六进制字节串,便于复制粘贴。下面的例子展示了如何将x86/32上的mov指令进行汇编为机器码。

$ rasm2 -a x86 -b 32 'mov eax, 33'
b821000000

除了将指令作为rasm命令的参数输入之外,还可以通过pipe管道传入:

$ echo 'push eax;nop;nop' | rasm2 -f -
5090

正如所见那样,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的汇编文件:

;
; Self-Stop shellcode written in rasm for x86
;
; --pancake
;

.arch x86
.equ base 0x8048000
.org 0x8048000  ; the offset where we inject the 5 byte jmp

selfstop:
  push 0x8048000
  pusha
  mov eax, 20
  int 0x80

  mov ebx, eax
  mov ecx, 19
  mov eax, 37
  int 0x80
  popa
  ret
;
; The call injection
;

  ret

将其汇编并在r2中分析:

[0x00000000]> e asm.bits = 32
[0x00000000]> wx `!rasm2 -f a.rasm`
[0x00000000]> pd 20
       0x00000000    6800800408   push 0x8048000 ;  0x08048000
       0x00000005    60           pushad
       0x00000006    b814000000   mov eax, 0x14 ;  0x00000014
       0x0000000b    cd80         int 0x80
          syscall[0x80][0]=?
       0x0000000d    89c3         mov ebx, eax
       0x0000000f    b913000000   mov ecx, 0x13 ;  0x00000013
       0x00000014    b825000000   mov eax, 0x25 ;  0x00000025
       0x00000019    cd80         int 0x80
          syscall[0x80][0]=?
       0x0000001b    61           popad
       0x0000001c    c3           ret
       0x0000001d    c3           ret

可视化模式

在radare2可视化模式下同样可以进行汇编,按下A键可以在当前偏移量处插入汇编语句。 最酷的是在可视化模式下,按下回车之前进行的汇编写入操作都是在内存中完成的。因此在保存修改之前我们可以检查代码块的大小以及是否有哪个指令会产生代码覆盖。

上一页Rasm2下一页反汇编

最后更新于4年前

这有帮助吗?