标签:
下面的是一个简单的测试程序,基本包括了所有的变量类型,包括静态的,常量的,全局的,本地的,还有new出来的
#include <iostream> using namespace std; const char* global_const_string = "hello world"; int global_int = 20; static int global_static_int = 30; int main() { static int local_static_int = 100; int local_int = 200; int* pValue = new int(300); cout << global_const_string << global_int << global_static_int << local_static_int << local_int << *pValue; delete pValue; system("pause"); return 0; }
下面我们依次分析每个变量所属的存储区域:
我们直接用WinDbg以源码的方式调试我们的测试程序consoleTest.exe.
首先我们分析下consoleTest.exe模块的起始地址及内部数据节的分布情况, 通过!address命令:
可以看到consoleTest.exe模块在内存中的起始地址是0x400000, 接下来可以通过!dh 0x400000分析它内部的数据节分布, 并且最终我们可以得出如下结论:
地址 400000 - 401000 : PE文件头,属性是只读
地址 401000 - 41d000 : .text, 属性是只读可执行,表示代码节
地址 41d000 - 422000 : .rdata, 属性是只读, 表示只读数据
地址 422000 - 426000 : .data, 属性是写入时拷贝,表示可读写数据
地址 426000 - 427000 : .rsrc, 属性是只读,表示资源节
通过!address -f:stack命令我们可以看到:
转自 http://www.cppblog.com/weiym/archive/2012/09/20/191429.html
标签:
原文地址:http://www.cnblogs.com/Gotogoo/p/5381838.html