菜鸟科技网

汇编 e命令

E 命令主要用于查看和修改内存或寄存器中的内容,它是进行底层调试、数据分析和程序修改的利器。

汇编 e命令-图1
(图片来源网络,侵删)

由于 E 命令是调试器(如 DEBUG.COM, Turbo Debugger, OllyDbg, x64dbg 等)的通用功能,但其具体语法会因调试器而异,下面我将主要以经典的 DEBUG.COM (16位) 和现代的 x64dbg (32/64位) 为例进行说明,因为它们的语法差异较大,能覆盖大部分使用场景。


在经典的 DEBUG.COM 中使用 E 命令

DEBUG 是 DOS 环境下的一个基础调试器,E 命令是其核心功能之一。

语法

E 命令有两种主要用法:

  • 查看内存内容:

    汇编 e命令-图2
    (图片来源网络,侵删)
    E address [L range]
    • address: 要查看的起始内存地址。
    • L range: (可选) LLength 的缩写,range 是要查看的字节数,如果不带 L,则通常显示一屏(约 128 字节)后暂停。
  • 修改内存内容:

    E address [list of values]
    • address: 要修改的起始内存地址。
    • list of values: 一系列要写入的字节值,可以用十六进制(如 41)或 ASCII 字符(如 'A')表示。

示例

假设我们要调试一个简单的 COM 程序,起始地址在 CS:100

示例 1:查看内存

-E CS:100

执行后,调试器会显示 CS:100 地址开始的内存内容,格式通常是: 地址: 原始值 新值? 此时你可以输入新的字节值来修改,或者直接按 Enter 或空格键跳过。

汇编 e命令-图3
(图片来源网络,侵删)

输出可能如下:

CS:100  A1 41. 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F-50 51 52 53 54 55 56 57 58 59 5A 61 62 63 64 65

这里 CS:100 的原始值是 A1, 后面是光标,你可以输入新值,后面的 41 42 ... 是连续的十六进制字节。

示例 2:修改内存

-E CS:100 'H' 'e' 'l' 'l' 'o' 0D 0A

这行命令会将字符串 "Hello" 及其后的回车换行符写入到 CS:100 开始的内存中。

  • 'H' 会被转换为十六进制 48
  • 0D 是回车,0A 是换行。

示例 3:连续修改

-E CS:100 41 42 43

这会将 CS:100 的值改为 41CS:101 的值改为 42CS:102 的值改为 43


在现代调试器 (x64dbg) 中使用 E 命令

现代调试器如 x64dbgE 命令功能更强大,语法也更灵活,它通常在命令窗口内存窗口 中使用。

语法

x64dbg 的 E 命令主要用于修改,查看内存内容更常用 D (Dump) 命令。E 命令的语法非常灵活:

E address [value] [value] ...
  • address: 目标地址(如 00401000, [EBX+8], @ESP)。
  • value: 要写入的值,可以是:
    • 字节: 41 (十六进制), 65 (十进制), 'A' (ASCII)。
    • 字/双字/四字: 1234, 12345678
    • 浮点数: 23
    • 字符串: "Hello World"
    • 指令: NOP, JZ 00401000
    • 填充: (用随机字节填充) 或 ?? XX (用 XX 填充)。

示例

假设当前模块的入口地址是 00401000

示例 1:修改单个字节

E 00401000 90

将地址 00401000 处的指令修改为 90 (NOP, 空操作指令)。

示例 2:写入一个字符串

E 00401000 "This is a test"

调试器会自动将字符串 "This is a test" 及其结尾的 00 (空字符) 写入内存。

示例 3:写入一个双字值

E 00401000 12345678

4 字节的值 12345678 写入 00401000 开始的内存。

示例 4:修改内存窗口中的值 (交互式)

这是 E 命令最直观的用法。

  1. 打开内存窗口,导航到你想要修改的地址(00401000)。
  2. 将光标定位到要修改的内存单元上。
  3. 直接按下 E 键。
  4. 调试器会弹出一个对话框,显示当前值,你可以输入新值并确认。
  5. 这种方法非常方便,无需记忆命令语法。

示例 5:使用表达式和符号

E [EBX+8] 100

EBX 寄存器值加上 8 所指向的内存地址中的内容修改为 100

E @ESP 0

将栈顶指针 ESP 指向的内存内容清零。


总结与对比

特性 经典 DEBUG.COM 现代 x64dbg
主要用途 查看、修改内存和寄存器 主要用于修改内存和寄存器
查看命令 E address D address (更常用)
修改命令 E address value1 value2 ... E address value1 value2 ...
数据类型 主要是字节(十六进制或ASCII) 字节、字、双字、字符串、浮点数、指令
地址寻址 段:偏移 (如 CS:100) 绝对地址 (如 00401000), [寄存器+偏移], @寄存器
交互方式 命令行,修改时需逐个确认 命令行或在内存窗口中按 E进行交互式修改
灵活性 较低 极高,支持复杂数学表达式和符号

核心要点

  1. E 是“编辑” (Edit) 的缩写:它的核心功能就是让你与内存内容进行交互。
  2. 分清“查看”与“修改”:在 DEBUG 中,E 既能看也能改,在 x64dbg 等现代调试器中,虽然 E 也能看,但用 D (Dump) 命令查看内存更符合习惯。
  3. 地址是关键:无论是查看还是修改,准确的目标地址都是最重要的。
  4. 善用交互模式:在图形化调试器中,直接在内存窗口中按 E 键是最直观、最高效的修改方式。
  5. 小心操作:直接修改内存或指令是高风险操作,很容易导致程序崩溃或行为异常,在修改前,最好保存好调试状态或程序的原始副本。

希望这个详细的解释能帮助你完全掌握汇编调试器中的 E 命令!

分享:
扫描分享到社交APP
上一篇
下一篇