name: "radare2"
command: "r2"
enabled: true
short_description: "二进制分析和逆向工程框架，支持反汇编、调试和脚本分析"
description: |
  Radare2是一个完整的二进制分析和逆向工程框架，支持多种架构和文件格式。

  **主要功能：**
  - 反汇编和反编译：支持多种架构（x86, ARM, MIPS等）
  - 调试支持：本地和远程调试
  - 脚本支持：支持r2pipe脚本和r2命令脚本
  - 多种文件格式：ELF, PE, Mach-O, 固件等
  - 交互式分析：命令行界面和可视化模式
  - 自动化分析：批量分析和脚本化分析

  **使用场景：**
  - 二进制文件分析
  - 逆向工程和漏洞研究
  - 恶意软件分析
  - CTF竞赛中的逆向题目
  - 固件分析
  - 漏洞利用开发

  **注意事项：**
  - 可以使用 -c 参数执行命令后退出（非交互模式）
  - 可以使用 -i 参数执行脚本文件
  - 可以使用 -q 参数静默模式（不显示启动信息）
  - 可以使用 -A 参数自动分析二进制文件
  - 可以使用 -d 参数附加到进程进行调试
parameters:
  - name: "target"
    type: "string"
    description: |
      目标文件、进程ID或特殊值。

      **格式：**
      - 文件路径: "/path/to/binary"
      - 进程ID: "1234" (需要配合 -d 参数)
      - 特殊值: "-" (从stdin读取), "--" (交互模式), "=" (从环境变量读取)

      **示例值：**
      - 二进制文件: "/tmp/vulnerable"
      - 进程调试: "1234" (配合 -d)
      - 从stdin: "-"

      **注意事项：**
      - 必需参数，不能为空
      - 如果指定进程ID，需要配合 -d 参数使用
      - 注意：radare2 要求文件路径必须是最后一个参数，因此 target 使用 position 1
    required: true
    position: 1
    format: "positional"
  - name: "commands"
    type: "string"
    description: |
      要执行的Radare2命令。可以是单个命令或多个命令（用分号分隔）。

      **格式：**
      - 单个命令: "aaa" (自动分析)
      - 多个命令: "aaa; pdf @main; VV" (分析、反汇编main函数、可视化)

      **常用命令：**
      - "aaa": 自动分析所有函数
      - "afl": 列出所有函数
      - "pdf @main": 反汇编main函数
      - "px 64": 以十六进制显示64字节
      - "VV": 进入可视化模式
      - "i": 显示文件信息
      - "iz": 显示字符串

      **示例值：**
      - "aaa" (自动分析)
      - "aaa; pdf @main" (分析并反汇编main函数)
      - "i; iz" (显示信息和字符串)

      **注意事项：**
      - 多个命令用分号(;)分隔
      - 执行完命令后程序会退出（非交互模式）
    required: false
    flag: "-c"
    format: "flag"
  - name: "script_file"
    type: "string"
    description: |
      要执行的脚本文件路径。脚本文件包含Radare2命令，每行一个命令。

      **格式：**
      - 脚本文件路径: "/path/to/script.r2"

      **示例值：**
      - "/tmp/analyze.r2"
      - "./scripts/auto_analyze.r2"

      **注意事项：**
      - 脚本文件中的命令会按顺序执行
      - 脚本执行完后程序会退出
    required: false
    flag: "-i"
    format: "flag"
  - name: "arch"
    type: "string"
    description: |
      指定目标架构。

      **常用架构：**
      - "x86": 32位x86
      - "x86_64": 64位x86
      - "arm": ARM架构
      - "arm64": ARM64架构
      - "mips": MIPS架构
      - "ppc": PowerPC架构

      **示例值：**
      - "x86"
      - "x86_64"
      - "arm"
      - "arm64"

      **注意事项：**
      - 如果不指定，radare2会尝试自动检测
      - 某些架构可能需要额外的配置
    required: false
    flag: "-a"
    format: "flag"
  - name: "bits"
    type: "int"
    description: |
      指定目标位数（16, 32, 64）。

      **示例值：**
      - 16 (16位)
      - 32 (32位)
      - 64 (64位)

      **注意事项：**
      - 通常与 -a 参数配合使用
      - 如果不指定，radare2会尝试自动检测
    required: false
    flag: "-b"
    format: "flag"
  - name: "auto_analyze"
    type: "bool"
    description: |
      自动分析二进制文件。相当于执行 "aaa" 命令。

      **使用场景：**
      - 快速分析二进制文件
      - 批量分析

      **注意事项：**
      - 启用后会自动分析所有函数
      - 可能需要较长时间
    required: false
    flag: "-A"
    format: "flag"
    default: false
  - name: "debug"
    type: "bool"
    description: |
      调试模式。可以附加到进程或调试文件。

      **使用场景：**
      - 附加到运行中的进程
      - 调试二进制文件

      **注意事项：**
      - 需要适当的权限
      - 如果target是进程ID，必须启用此选项
    required: false
    flag: "-d"
    format: "flag"
    default: false
  - name: "quiet"
    type: "bool"
    description: |
      静默模式。不显示启动信息和提示符。

      **使用场景：**
      - 脚本化使用
      - 批量分析
      - 自动化工具调用

      **注意事项：**
      - 适合非交互式使用
      - 减少输出噪音
    required: false
    flag: "-q"
    format: "flag"
    default: false
  - name: "seek"
    type: "string"
    description: |
      设置起始地址。可以是十六进制地址或表达式。

      **格式：**
      - 十六进制: "0x400000"
      - 表达式: "main+0x10"

      **示例值：**
      - "0x400000"
      - "main"
      - "0x1000"

      **注意事项：**
      - 地址可以是十六进制或符号名
      - 用于从特定位置开始分析
    required: false
    flag: "-s"
    format: "flag"
  - name: "base_address"
    type: "string"
    description: |
      设置基址（base address）。用于加载地址。

      **格式：**
      - 十六进制地址: "0x400000"

      **示例值：**
      - "0x400000"
      - "0x1000000"

      **注意事项：**
      - 用于指定二进制文件的加载地址
      - 通常用于分析固件或内存转储
    required: false
    flag: "-B"
    format: "flag"
  - name: "eval"
    type: "string"
    description: |
      设置配置变量。格式为 key=value。

      **格式：**
      - "key=value"
      - 多个变量用空格分隔: "asm.arch=x86 asm.bits=32"

      **示例值：**
      - "asm.arch=x86"
      - "asm.bits=32"
      - "scr.color=false"

      **注意事项：**
      - 用于设置radare2的配置变量
      - 多个变量用空格分隔
    required: false
    flag: "-e"
    format: "flag"
  - name: "project"
    type: "string"
    description: |
      加载或保存项目文件。

      **格式：**
      - 项目文件路径: "/path/to/project.r2"

      **示例值：**
      - "./project.r2"
      - "/tmp/analysis.r2"

      **注意事项：**
      - 项目文件保存分析状态和配置
      - 可以用于恢复之前的分析
    required: false
    flag: "-p"
    format: "flag"
  - name: "additional_args"
    type: "string"
    description: |
      额外的radare2参数。用于传递未在参数列表中定义的radare2选项。

      **可用选项：**
      - "-C": 强制使用颜色输出
      - "-f": 强制打开文件（即使格式不匹配）
      - "-L": 列出支持的插件
      - "-M": 启用写模式
      - "-n": 不加载配置文件
      - "-N": 不执行脚本
      - "-S": 在调试模式下启动
      - "-t": 使用线程模式
      - "-u": 使用unicorn引擎
      - "-v": 显示版本信息
      - "-w": 写模式
      - "-z": 扫描字符串
      - "-X": 执行r2pipe脚本
      - "-P patch": 应用补丁
      - "-m maddr": 映射地址

      **示例值：**
      - "-w" (写模式)
      - "-n" (不加载配置文件)
      - "-M" (启用写模式)
      - "-z" (扫描字符串)

      **注意事项：**
      - 多个参数用空格分隔
      - 确保参数格式正确，避免命令注入
      - 此参数会直接追加到命令末尾
    required: false
    format: "positional"
