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

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. Vue 事件相关实例方法---on/emit/off/once

    一.初始位置 平常项目中写逻辑,避免不了注册/触发各种事件 今天来研究下 Vue 中,我们平常用到的关于 on/emit/off/once 的实现原理 关于事件的方法,是在 Vue 项目下面文件中的 ...

  2. NX二次开发-Block UI C++界面Specify Point(指定点)控件的获取(持续补充)

    Specify Point(指定点)控件的获取 NX9+VS2012 #include <uf.h> #include <uf_ui.h> UF_initialize(); / ...

  3. [NOIP模拟16]题解

    A.Blue 出题人大概已经去为国家处理积压子弹了? 贪心,让每一只青蛙(我怂行吧)都尽量往远跳,能到达的最远的被踩了就跳次远的,以此类推.可以维护一个单调队列,表示每只青蛙的位置(开始都是0).然后 ...

  4. LINIX上Nginx的从零安装

    源码编译方式: #一般系统中已经装了了make和g++,无须再装 安装make: yum -y install autoconf automake make 安装g++: yum -y install ...

  5. 简单了解malloc分配内存

    直接看代码 #include <stdio.h> #include <malloc.h> int main() { * * ); printf("分配后请查看内存&q ...

  6. Java-Class-I:javax.servlet.http.HttpServletRequest

    ylbtech-Java-Class-I:javax.servlet.http.HttpServletRequest 1.返回顶部   2.返回顶部 1. package com.ylbtech.ap ...

  7. SPSS把一个数据样本随机分为两部分

    SPSS把一个数据样本随机分为两部分 1.  打开SPSS数据文件. 2.  选择DATA>SELECT CASES,打开"Select Cases"对话框 3. 选择&qu ...

  8. lamp+nginx代理+discuz+wordpress+phpmyadmin搭建

    我们以模拟实际需求的形式来复习.需求如下:1. 准备两台centos 6,其中一台机器跑mysql,另外一台机器跑apache和nginx + php2. 同时安装apache和nginx,其中ngi ...

  9. Windows下安装PIL进行图像处理

    过程一波三折 参考 http://blog.csdn.net/zxia1/article/details/8254113 http://stackoverflow.com/questions/3544 ...

  10. 【Java多线程系列随笔一】浅析 Java Thread.join()

    一.在研究join的用法之前,先明确两件事情. 1.join方法定义在Thread类中,则调用者必须是一个线程, 例如: Thread t = new CustomThread(); //这里一般是自 ...