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

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. Delphi max函数和min函数

    uses单元 math: min函数  min(A,B); 比较A.B的大小,取最小值 max函数  min(A,B); 比较A.B的大小,取最大值 原型示例:function Min(const A ...

  2. Dart编程实例 - Dynamic 关键字

    Dart编程实例 - Dynamic 关键字 void main() { dynamic x = "tom"; print(x); } 本文转自:http://codingdict ...

  3. Dart编程实例 - 第一个Dart程序

    Dart编程实例 - 第一个Dart程序 main() { print("Hello World!"); } 本文转自:http://codingdict.com/article/ ...

  4. Read Committed

    在Read Committed隔离级别下,一个事务可能会遇到不可重复读(Non Repeatable Read)的问题. 不可重复读是指,在一个事务内,多次读同一数据,在这个事务还没有结束时,如果另一 ...

  5. 离线+生成树+并查集——cf1213G

    #include<bits/stdc++.h> using namespace std; #define N 200005 #define ll long long struct Edge ...

  6. Python每日一题 001

    Github地址:https://github.com/Yixiaohan/show-me-the-code Talk is Cheap, show me the code. --Linus Torv ...

  7. 前台页面中json和字符串相互转化

    比如我有两个变量,我要将a转换成字符串,将b转换成JSON对象: var a={"name":"tom","sex":"男&quo ...

  8. flutter 使用keyboard_actions 关闭ios键盘

    项目中登录 输入账号密码 弹出的键盘 关闭不了,从而 引来一些问题, 1,第一次关闭 项目是在 最外层包裹一层,点击的时候进行关闭, return Scaffold( resizeToAvoidBot ...

  9. VMware Network Adapter VMnet1/8详解

    转自:https://www.cnblogs.com/systemnet123/articles/2640883.html VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网 ...

  10. node 创建静态web服务器(下)(处理异步获取数据的两种方式)

    接上一章. 上一章我们说创建的静态web服务器只能识别html,css,js文件,功能较为单一,且图片格式为text/html,这是不合理的. 本章,我们将解决该问题. 这里,我们先准备好一个json ...