📕
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. 基本命令

定位

定位(跳转)

为了移动我们正在检查的文件,我们将需要使用s命令更改偏移量。该参数是一个数学表达式,可以包含标志名称,括号,加法,减法,乘积,以及使用方括号获取到的对应内存地址上的数据。

下面是一些示例命令,注意观察偏移量如何变化。:

[0x00000000]> s 0x10
[0x00000010]> s+4
[0x00000014]> s-
[0x00000010]> s+
[0x00000014]>

第一行将当前偏移量移至地址0x10。

第二个是相对当前位置,向后偏移4个字节。

最后的2个命令分别是撤消前面的操作和重做最后一个查找操作。

我们不仅可以使用数字,还可以使用复杂的表达式或基本的算术运算来表示要查找的地址。请查看?$?帮助消息,里面描述了可以在表达式中使用的内部变量, 例如下面的表达式与s + 4是相同的:

[0x00000000]> s $$+4

在调试器中(或在仿真时),我们还可以将寄存器名称用作引用。通过.dr*命令将寄存器名称作为标志加载,该命令会在后台运行。

[0x00000000]> s rsp+0x40

下面是关于s命令的帮助信息,之后将详细介绍它。

[0x00000000]> s?
Usage: s    # Help for the seek commands. See ?$? to see all variables
| s                 Print current address
| s.hexoff          Seek honoring a base from core->offset
| s:pad             Print current address with N padded zeros (defaults to 8)
| s addr            Seek to address
| s-                Undo seek
| s-*               Reset undo seek history
| s- n              Seek n bytes backward
| s--[n]            Seek blocksize bytes backward (/=n)
| s+                Redo seek
| s+ n              Seek n bytes forward
| s++[n]            Seek blocksize bytes forward (/=n)
| s[j*=!]           List undo seek history (JSON, =list, *r2, !=names, s==)
| s/ DATA           Search for next occurrence of 'DATA'
| s/x 9091          Search for next occurrence of \x90\x91
| sa [[+-]a] [asz]  Seek asz (or bsize) aligned to addr
| sb                Seek aligned to bb start
| sC[?] string      Seek to comment matching given string
| sf                Seek to next function (f->addr+f->size)
| sf function       Seek to address of specified function
| sf.               Seek to the beginning of current function
| sg/sG             Seek begin (sg) or end (sG) of section or file
| sl[?] [+-]line    Seek to line
| sn/sp ([nkey])    Seek to next/prev location, as specified by scr.nkey
| so [N]            Seek to N next opcode(s)
| sr pc             Seek to register
| ss                Seek silently (without adding an entry to the seek history)

> 3s++        ; 3 times block-seeking
> s 10+0x80   ; seek at 0x80+10

如果要检查数学表达式的结果,可以使用?命令对其求值。只需将表达式作为参数传递。结果可以以十六进制,十进制,八进制或二进制格式显示。

> ? 0x100+200
0x1C8 ; 456d ; 710o ; 1100 1000

“?”子命令能以一种特定格式(以10为基数,以16为底数...)显示输出。参见?v和?vi。

在可视化模式下,您可以在搜索历史记录中按u(撤消)或U(重做)以返回到上一个位置或前进到下一个位置。

打开文件

我们使用以Linux ELF格式编译的简单hello_world.c作为测试文件,编译之后,让我们用radare2打开它:

$ r2 hello_world

现在命令行提示符已经成功显示:

[0x00400410]>

是时候向更深处进击了。

定位到任意的地址

所有接受地址作为命令参数的查找命令都可以使用任意进制,例如十六进制,八进制,二进制或十进制。定位到地址0x0的一个简便命令就是0x0

[0x00400410]> s 0x0
[0x00000000]>

显示当前地址:

[0x00000000]> s
0x0
[0x00000000]>

显示当前地址的另一个方法是使用:?v $$。

可以像下面这样向地址高位跳转N个位置, 有没有空格都无所谓:

[0x00000000]> s+ 128
[0x00000080]>

撤销前两个seek操作,回到最初地址:

[0x00000080]> s-
[0x00000000]> s-
[0x00400410]>

现在,我们回到了0x00400410, 下面的命令可以展示我们的seek历史。

[0x00400410]> s*
f undo_3 @ 0x400410
f undo_2 @ 0x40041a
f undo_1 @ 0x400410
f undo_0 @ 0x400411
# Current undo/redo position.
f redo_0 @ 0x4005b4
上一页基本命令下一页块大小

最后更新于4年前

这有帮助吗?