当我们在调试器中分析问题时, 经常需要查看不同内存块的内容以分析产生的原因, 并且在随后验证所做出的假设是否正确. 由于各个对象的状态都是保存在内存中的, 因此内存的内容也就相当于对象的状态.

d命令最常见的格式就是根据指定的类型信息来显示存储在某地址中的数据. 调试器并不会去猜测这个地址上存储的是什么数据, 因为在大多数情况下猜测都是错误的. 所以需要用户显式地制定按照何种格式来解析数据. 命令格式如下:

d [type] [address range]

  • d    - 该命令按照上一个d*命令的同样格式显示数据. 如果前面没有d*命令的话, 它跟db的效果相同.
  • da  - ASCII 字符. 每行最多显示48个字符. 直到遇到一个null字节, 或者指定的范围内的所有字符都已经被显示. 所有无法打印的字符都会被显示为" . "
  • db  - 字节值或ASCII字符. 默认长度为128字节.
  • dc  - 双字(4字节)值和ASCII字符. 默认长度为32 DWORDs(128字节)
  • dd  - 双字(4字节). 默认长度为32 DWORDs(128字节)
  • dD  - 双精度浮点数(8字节). 默认15个数字(120字节)
  • df   - 单精度浮点数(4字节). 默认16个数字(63字节).
  • dp  - 指针大小的值. 相当于dd或dq, 具体取决于计算机的处理器架构是x86还是x64. 默认长度32个双字, 或16个四字(128字节).
  • dq  - 四字值(8字节). 默认16四字(128字节).
  • du  - Unicode字符. 每行显示至多48个字符. 直到遇到一个null字节, 或者指定的范围内的所有字符都已经被显示. 所有无法打印的字符都会被显示为" . "
  • dw  - 字值(2字节). 默认显示64个字(128字节).
  • dW - 字值(2字节)和ASCII字符. 默认64个字(128字节).
  • dyb - 二进制值和字节值. 默认32个字节.
  • dyd - 二进制值和四字值(4字节). 默认是8个双字(32字节).

这里顺便把计算机中的计量单位也总结一下吧.

============

bit(比特) – 1 or 0

1 byte(字节) = 8 bit(比特)

1 word(字) = 2 byte = 16 bit

1 dword(双字) = 4 byte = 32 bit

1 qword(四字) = 8 byte = 64 bit

1 ASCII character = 1 byte

1 Unicode character = 2 byte

另一种方式 -  d*s

===========

该命令形式可以将内存区域转储出来, 并且将内存中的每一个元素都视作一个单元对其进行解析. 这个命令有三种形式, 通常被称之为d*s命令.

dds 将四个字节视作一个单元

dqs 将八个字节视作一个单元

dps 则根据当前处理器架构来选择最合适的长度. 它将每个从内存读取出来的值都作为某种数据类型的指针.

在内存中搜索某个值 - 命令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>来解决这个问题.

该命令的参数为一个地址, 如果没有指定地址参数, 那么这个扩展命令将搜索并且枚举所有的内存区域并给出详细的信息.

在WinDBG中查看内存的命令的更多相关文章

  1. Android 中查看内存的使用情况集经常使用adb命令

    1. 在IDE中查看Log信息 当程序执行垃圾回收的时候,会打印一条Log信息.其格式例如以下: D/dalvikvm: <GC_Reason> <Amount_freed>, ...

  2. GDB查看内存(x 命令)

    gdb查看内存命令 首先使用gdb [YourFileName].c进入gdb界面 使用examine命令,字母缩写为x查看内存地址的值.x命令语法 x/[number][format] <ad ...

  3. linux下查看内存的命令

    top能显示系统内存.我们常用的Linux下查看内容的专用工具是free命令. 下面是对内存查看free命令输出内容的解释: total:总计物理内存的大小. used:已使用多大. free:可用有 ...

  4. iostat iotop 查看硬盘的读写、 free 查看内存的命令 、netstat 命令查看网络、tcpdump 命令

    iostat 命令 查看硬盘的使用情况: iostat iostat -x iotop 命令: 若没安装先安装: yum install iotop -y free 命令,用于查看内存的使用量: fr ...

  5. Jboss的jmx-console中查看内存和线程状态

    步骤: 1.假设jboss运行在 192.168.1.100:8080 地址和端口上. 2. 浏览器中访问http://192.168.1.100:8080/,然后选择jmx-console 3.选择 ...

  6. 在WinDBG中查看调用栈的命令

    命令 ========== k k命令显示的是一定数量的栈帧, 其中帧的数量是由.kframes命令来控制的, 默认值是256. kp 5 显示调用栈中前5个函数以及他们的参数. kb 5 显示调用栈 ...

  7. Android 中查看内存的使用情况集常用adb命令

    http://blog.csdn.net/bigconvience/article/details/35553983 http://blog.csdn.net/duantihi/article/det ...

  8. 在WinDBG中查看函数的反汇编代码的命令

    命令 ========== u . u $ip 上面的两个命令是效果是一样的, 反汇编当前$ip地址上的8条命令. uf . uf $ip 上面两个命令的效果是一样的, 反汇编当前$ip地址上的整个函 ...

  9. Linux中查看文本文件内容命令cat/tac/nl/more/less/head/tail/vi总结

    概述 在Linux系统下,有很多命令可以查看文本文件的内容,如cat/tac/nl/more/less/head/tail等命令,当然还有vi/nano等文本编辑器.在这里,我只介绍其中自己常用的一部 ...

随机推荐

  1. Jenkins应用

    转自 https://www.cnblogs.com/syw20170419/category/1239520.html Jenkins+Git+Python 进行持续集成接口测试 https://w ...

  2. NX二次开发-OLE/COM向EXCEL表格中插入图片

    今晚有一个兄弟问我怎么往EXCEL里插入图片(加工程序单中需要插入图片),这个我之前也没弄过,回复了他一句不知道,后来刚刚干完游戏吃完鸡,就去VC++的书上翻了翻,还真的被我翻到了.VC++的方法往E ...

  3. Ext 行模型与Grid视图

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. vc/atlmfc/include/afx.h(24) : fatal error C1189: #error : Building MFC application with /MD[d] (CRT

    环境:win7,64位,vs2012 1> c:/program files/microsoft visual studio 8/vc/atlmfc/include/afx.h(24) : fa ...

  5. LaTex 插入图像,以及应用表格

    插入图像 参考:http://www.ctex.org/documents/latex/graphics/ 1: \includegraphics[width=20mm]{head.png} 应用表格 ...

  6. python3 使用int函数将浮点数转换成整数

    int函数将浮点数转换成整数需要注意的地方 >>> int(153)153>>> int(153.4)153>>> int(153.5)153&g ...

  7. python中函数的定义及调用

    python中函数的定义及使用方法 1.函数的概念:函数是将具有独立功能的代码块组织为一个整体,使其具有特殊功能的代码集; 2.函数的作用:使用函数可以加强代码的复用性,提高程序编写的效率; 3.函数 ...

  8. HTML5 Shiv--解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法

    HTML5的语义化标签以及属性,可以让开发者非常方便地实现清晰的web页面布局.大多数浏览器基本兼容html5,但目前来说ie6/ie7/ie8还不兼容html5标签,所以需要javascript处理 ...

  9. hdu 6437 /// 最小费用最大流 负花费 SPFA模板

    题目大意: 给定n,m,K,W 表示n个小时 m场电影(分为类型A.B) K个人 若某个人连续看了两场相同类型的电影则失去W 电影时间不能重叠 接下来给定m场电影的 s t w op 表示电影的 开始 ...

  10. win7+ubuntu双系统安装

    XP+ubuntu双系统可參考 xp硬盘上安装ubuntu12.04双系统 1.XP安全不再,最终将吾等磨机的人逼上梁山,是时候做一个win7+ubuntu的双系统了. 废话少说,直接进入主题,先腾出 ...