一、windbg查看内存命令:
当我们在调试器中分析问题时, 经常需要查看不同内存块的内容以分析产生的原因, 并且在随后验证所做出的假设是否正确. 由于各个对象的状态都是保存在内存中的, 因此内存的内容也就相当于对象的状态.
d命令最常见的格式就是根据指定的类型信息来显示存储在某地址中的数据. 调试器并不会去猜测这个地址上存储的是什么数据, 因为在大多数情况下猜测都是错误的. 所以需要用户显式地制定按照何种格式来解析数据. 命令格式如下:
语法:d [type][address range] //d* 命令显示给定范围内存的内容
d, da, db, dc, dd, dD, df, dp, dq, du, dw, dW, dyb, dyd (Display Memory)
如果省略掉Range ,命令将会从上一条内存查看命令结束的位置开始。这使得可以连续的进行内存查看。
1.da:ASCII 字符每行最多48个字符。显示一直继续直到遇到第一个null字节或者到达range 值指定的所有字符都已经显示。所有不可打印字符,如回车和换行都被显示为点号(.)。
2.db:字节值和ASCII字符每个显示行都包含该行第一个字节的地址,后面跟16进制字节值。这些字节值后面会紧跟它们对应的ASCII值。第8和第9个16进制值之间会用连字号(-)分隔。所有不可打印字符,如回车和换行都被显示为点号(.)。
3.dc:双字值(4字节)和ASCII字符。每个显示行都会显示行中第一个数据的地址,并且每行最多显示8个16进制值以及它们对应的ASCII字符。默认的显示数量为32个DWORD(128字节)。
4.dd:双字值(4字节) 默认的显示数量为32个DWORD(128字节)。
示例:
- 0:000> da 0027eb3c
- 0027eb3c "Tencent Technology(Shenzhen) Com"
- 0027eb5c "pany Limited"
- 0:000> ea 0027eb3c "Tencent Technology(Shenzhen) Company Limited1"
- 0:000> da 0027eb3c
- 0027eb3c "Tencent Technology(Shenzhen) Com"
- 0027eb5c "pany Limited1"
二、在内存中搜索某个值: 命令 s
命令s(表示搜索search), 是一个非常有用的命令, 可以用来在调试目标内找出已知的值.
这个命令的参数包括素要搜索的类型和值.
s –d 0012ff40 L1024 c0000005
其中-d代表双字DWORD, 是搜索的类型. 其他类型例举如下:
- b – Byte
- w – WORD
- d – DWORD
- q – QWORD
- a – ASCII字符串
- u – Unicode字符串
三、查看内存的每个位置上都包含着什么
在调试时, 对象和栈都包含了大量的指针, 我们无法很快地猜测出他们所表示的数据. 虽然我们可以很容易地将内核空间的地址与用户态空间的地址分开, 但要把一个表示栈的地址和一个表示堆的地址区分开却不容易. 我们可以使用一个很有用的扩展命令!address <your address>来解决这个问题.
该命令的参数为一个地址, 如果没有指定地址参数, 那么这个扩展命令将搜索并且枚举所有的内存区域并给出详细的信息.
这个学习起来比较简单:我们直接使用!address -?就可以找到它的使用说明:
-summary 仅显示摘要信息。
Usage SUMMARY: 表示用途摘要,RegionUsageIsVAD:表示此地址区域已被分配;RegionUsageFree:代表此地址区域已被释放,既没有保留也没有被提交,将来可以申请使用;RegionUsageImage:代表此地址区域被映射到二进制文件的镜像;Region UsageStack:代表此地址区域用于线程栈;RegionUsageTeb:代表此地址区域用于保存目标进程的所有线程的TEB结构;RegionUsageHeap:代表此地址区域用于堆内存;RegionUsage Pdb:代表此地址区域用于保存目标进程的PEB结构;RegionUsageProcessParameters:代表此内存块用于保存目标进程的启动参数;RegionUsageEnviromentBlock:代表此地址区域用于保存目标进程的环境块。
Type SUMMARY: 表示类型摘要,共有四种:第一种是什么都不是,即尚未被使用的;第二种是MEM_IMAGE,即地址映射于一个可执行镜像文件片段,如DLL文件;第三种是MEM_ MAPPED,即地址映射于不可执行的镜像文件片段,如页文件;第四种是MEM_PRIVATE,即私有有内存,这里的私有是针对进程而言的,私有内存无法在多个进程间共享;
State SUMMARY: 表示状态摘要,共三种:MEM_FREE,即空闲内存;MEM_RESERVED,即保留内存,保留内存尚不能被实际使用,但其地址空间已被预留,尚需一个提交动作。最后是MEM_COMMIT,即内存已被提交,正在被使用。
windbg命令学习2的更多相关文章
-
windbg命令学习3
3.进程与线程: 既可以显示进程和线程列表,又可以显示指定进程或线程的详细信息.调试命令可以提供比taskmgr更详尽的进程资料,在调试过程中不可或缺. 3.1. 进程命令 进程命令包括以下:显示进程 ...
-
windbg命令学习4
4.查看调用栈 k命令:显示的是一定数量的栈帧, 其中帧的数量是由.kframes命令来控制的, 默认值是256. 我们如何来判断函数的栈指针,参数地址和局部变量地址呢? 举一个简单的windbg的k ...
-
windbg命令学习1
一.windbg 常用知识: 1. Windbg中的调试命令,分为三种:基本命令,元命令和扩展命令.基本命令和元命令是调试器自带的,元命令总是以“.”开头,而扩展命令是外部加入的,总是以感叹号“!”开 ...
-
Windbg命令学习15(bp bm bu bl bc ba断点)
以下以skinhgy为例,windbg附加运行 1. bp 命令是在某个地址下断点, 可以 bp 0x7783FEB 也可以 bp MyApp!SomeFunction . 对于后者,WinDBG 会 ...
-
Windbg命令脚本
命令脚本,就是将完成某个特定任务的相关命令组合在一起,保存在脚本文件里,加载到Windbg里执行,达到我们的目的.你可以理解为脚本就是一种语言,就像c或者汇编,但是他不需要编译器将其编译为可执行文件, ...
-
别出心裁的Linux命令学习法
别出心裁的Linux命令学习法 操作系统操作系统为你完成所有"硬件相关.应用无关"的工作,以给你方便.效率.安全.操作系统的功能我总结为两点:管家婆和服务生: 管家婆:通过进程.虚 ...
-
Git版本控制软件结合GitHub从入门到精通常用命令学习手册(转)
简要参考:http://www.tuicool.com/articles/mEvaq2 http://gitref.org/zh/index.html GIT 学习手册简介 本站为 Git 学习参考手 ...
-
penghui_031413 Bat命令学习
penghui_031413 Bat命令学习 基础部分:====================================================================== ...
-
WinDbg 命令三部曲:(一)WinDbg 命令手册
本文为 Dennis Gao 原创技术文章,发表于博客园博客,未经作者本人允许禁止任何形式的转载. 系列博文 <WinDbg 命令三部曲:(一)WinDbg 命令手册> <WinDb ...
随机推荐
-
gene_abundance_estimation
/home/liuhui/bin/trinityrnaseq_r20140413p1/util/support_scripts/get_Trinity_gene_to_trans_map.pl Tri ...
-
js实现-下拉列表左右选择
下拉列表左右选择 * 下拉选择框 <select> <option>111</opt ...
-
C#教程之打印和打印预览
最近研究一了一下关于PDF打印和打印预览的功能,在此小小的总结记录一下学习过程. 实现打印和打印预览的方法,一般要实现如下的菜单项:打印.打印预览.页面设置. PrintDocument类 Print ...
-
haproxy 负载elasticsearch 切换
Attempted to send a bulk request to Elasticsearch configured at '["http://192.168.32.152:9200&q ...
-
浅谈DevExpress<;五>;:TreeList简单的美化——自定义单元格,加注释以及行序号
今天就以昨天的列表为例,实现以下效果:预算大于110万的单元格突出显示,加上行序号以及注释,如下图:
-
ZooKeeper 会话超时
1.会话概述 在ZooKeeper中,客户端和服务端建立连接后,会话随之建立,生成一个全局唯一的会话ID(Session ID).服务器和客户端之间维持的是一个长连接,在SESSION_TIMEOUT ...
-
js 面向对象的三大特性:封装,继承、多态
一:什么是封装? 封装的定义:就是对象内部的变化对外界是透明的,不可见的. 封装的场景: 在写项目的过程中,有时候不同页面,会有相同的功能,我们还需要每个页面都写一遍吗?额,,,,其实也可以写的,只不 ...
-
C++程序设计方法1:分离代码
使用头文件,分离声明与定义 防止重复包含: #ifndef FUNC_H #define FUNC_H .... #endif main函数的命令行参数: #include <iostream& ...
-
org.springframework.beans.factory.BeanCreationException: Error creating bean with name &#39;stu&#39; defined in class path resource [applicationContext.xml]: Instantiation of bean failed; nested exception is
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'stu' defined ...
-
Python 多人聊天工具 ( 多线程 )
程序实现: 1.单或多客户端使用 telnet 登陆服务端 ( 可远程 ) 进行会话 2.服务端实现登陆.注册.退出功能 3.客户端发送的消息会被广播到已经登陆的其他用户界面 4.连接到服务端后,可以 ...