Windbg学习笔记【3】

#1 代码

 1 #include <windows.h>
 2 #include <stdio.h>
 3 
 4  int main(){
 5      int * p = ( int *)VirtualAlloc(NULL,  256* 4096, MEM_RESERVE, PAGE_NOACCESS);
 6     printf( " p == %p ", p);
 7 
 8      int *q = ( int *)VirtualAlloc(p,  4* 4096, MEM_COMMIT, PAGE_READWRITE);
 9      for ( int t= 0; t< 4096; t++){
10         q[t] = t;
11         printf( " %8d ", q[t]);
12     }
13 
14     getchar();
15      return  0;
16 }

 

目的很简单,向系统保留256个页面,再提交最开始的4个页面,提交的四个页面全部写入数据。

#2 Windbg登场,!address 查看区域存储信息

bp `source.cpp:8`

bp `source.cpp:9`

接下来开始 g;x

 !address @@c++(p) 查看 0x00330000 起始区域的存储信息。

Windbg学习笔记【3】

MASM表达式中, 任何符号的数值就是它的内存地址。
C++表达式中, 任何符号都根据类型来解释。
更多请查询windbg帮助档中“Evaluating Expressions”一节。

!address p 的结果相当于 !address 0013fcb0

Windbg学习笔记【3】

#3 用dt查看数组

  c  ---  compact

  a  ---  按数组对待

  64 ---- 输出64个元素

  int ---- 数据类型

  @@c++(q)

Windbg学习笔记【3】

你可能感兴趣的:(学习笔记)