返回
对代码指令s、!address、.writemem的使用简介
见解分享
2023-11-14 00:10:08
在上一篇文章中,我们主要使用了三个命令 !address
,s
,。writemem
把丢失的代码成功的保存到了文件中。本文简单介绍一下上文用到的这三个命令。
很多命令都会用到地址范围。比如 s
命令,.writemem
命令。在 windbg
中可以通过两种形式指定地址范围。
1.address
!address [-l[n]] [-d <space>] {[-|+]expr1}[,{[-|+]expr2}[...]]}
-l
:以列表格式显示数据。-n
:显示n
个地址。-d
:指定地址之间间隔的大小。默认为十六进制。expr
:可以是以下任何一种:- 十进制、十六进制、八进制或二进制的地址。
- 一个简单的数学表达式。
- 一个寄存器。
- 一个变量。
- 一个内存区域。
如果指定了多个表达式,那么它们之间可以用逗号分隔。
例如,以下命令将以列表格式显示 0x10000
到 0x10010
之间的地址,间隔为 8
个字节:
!address -l8 0x10000-0x10010
以下命令将显示 eax
寄存器的内容:
!address eax
2.s
s <expression>[;<expression>...]
expression
:可以是以下任何一种:- 一条汇编指令。
- 一个内存地址。
- 一个寄存器。
- 一个变量。
- 一个数学表达式。
如果指定了多个表达式,那么它们之间可以用分号分隔。
例如,以下命令将单步执行一条汇编指令:
s inc eax
以下命令将单步执行到内存地址 0x10000
:
s 0x10000
3.writemem
.writemem <memory-address> <data>
memory-address
:要写入数据的内存地址。data
:要写入数据。可以是以下任何一种:- 一个数字。
- 一个字符串。
- 一个二进制数据块。
例如,以下命令将在内存地址 0x10000
处写入数字 1
:
.writemem 0x10000 1
以下命令将在内存地址 0x10010
处写入字符串 "Hello, world!":
.writemem 0x10010 "Hello, world!"