青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

理解程序內(nèi)存一文中我們介紹了普通程序運行時在內(nèi)存中的布局,下面我們專門針對C++源代碼以WinDbg為工具分析下C++程序的變量存儲模型, 要理解下面的知識,請先看懂理解程序內(nèi)存一文。

下面我們嘗試分析C++變量的存儲模型, 我們的測試程序非常簡單:
#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;
}

可以看到我們上面對程序雖然簡單,但是基本包括了所有的變量類型,包括靜態(tài)的,常量的,全局的,本地的,還有new出來的,下面我們依次分析每個變量所屬的存儲區(qū)域。

我們直接用WinDbg以源碼的方式調(diào)試我們的測試程序consoleTest.exe.
首先我們分析下consoleTest.exe模塊的起始地址及內(nèi)部數(shù)據(jù)節(jié)的分布情況, 通過!address命令:
*   400000   401000     1000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image "ConsoleTest.exe"
|-  401000   41d000    1c000 MEM_IMAGE   MEM_COMMIT  PAGE_EXECUTE_READ                  Image "ConsoleTest.exe"
|-  41d000   422000     5000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image "ConsoleTest.exe"
|-  422000   426000     4000 MEM_IMAGE   MEM_COMMIT  PAGE_WRITECOPY                     Image "ConsoleTest.exe"
|-  426000   427000     1000 MEM_IMAGE   MEM_COMMIT  PAGE_READONLY                      Image "ConsoleTest.exe"
可以看到consoleTest.exe模塊在內(nèi)存中的起始地址是0x400000, 接下來可以通過!dh 0x400000分析它內(nèi)部的數(shù)據(jù)節(jié)分布, 并且最終我們可以得出如下結(jié)論:
地址 400000 - 401000 : PE文件頭,屬性是只讀
地址 401000 - 41d000 : .text, 屬性是只讀可執(zhí)行,表示代碼節(jié)
地址 41d000 -  422000 : .rdata, 屬性是只讀, 表示只讀數(shù)據(jù)
地址 422000 -  426000 : .data, 屬性是寫入時拷貝,表示可讀寫數(shù)據(jù)
地址 426000 - 427000 : .rsrc, 屬性是只讀,表示資源節(jié)

通過!address -f:stack命令我們可以看到:
0:000> !address -f:stack
  BaseAddr EndAddr+1 RgnSize     Type       State                 Protect             Usage
-------------------------------------------------------------------------------------------
   40000   13d000    fd000 MEM_PRIVATE MEM_RESERVE                                    Stack [8b0.1d0; ~0]
  13d000   13e000     1000 MEM_PRIVATE MEM_COMMIT  PAGE_READWRITE|PAGE_GUARD          Stack [8b0.1d0; ~0]
  13e000   140000     2000 MEM_PRIVATE MEM_COMMIT  PAGE_READWRITE                     Stack [8b0.1d0; ~0]
可以看到我們主線程的堆棧起始地址是: 13e000 - 140000

接下來我們首先分析所有全局變量的存儲區(qū)域, 通過x consoletest!global*命令,讓調(diào)試器列出所有在consoletest模塊中g(shù)lobal開頭的調(diào)試符號:
0:000> x consoletest!global*
00422000 ConsoleTest!global_const_string = 0x0041d1dc "hello world"
00422004 ConsoleTest!global_int = 0n20
00422008 ConsoleTest!global_static_int = 0n30
004238a0 ConsoleTest!global_locale = 0x00000000
通過分析我們可以看到我們的3個全局變量global_const_string, global_int, global_static_int全都分布在422000 - 426000之間的.data可讀寫數(shù)據(jù)節(jié)中。
而global_const_string所指向的內(nèi)容
0x0041d1dc "hello world"
則分布在41d000 -  422000 之間的.rdata只讀數(shù)據(jù)節(jié)中,這個結(jié)論也符合我們平時關(guān)于全局變量存儲區(qū)域的理解。

下面我們再嘗試分析局部變量的存儲區(qū)域,再main函數(shù)內(nèi)部cout的地方設(shè)置斷點,然后讓程序運行到此, 然后輸入dv /t /i /v命令查看所有局部變量, 可以看到
0:000> dv /t /i /v
prv local  0042200c int local_static_int = 0n100
prv local  0013ff70 int local_int = 0n200
prv local  0013ff74 int * pValue = 0x02248ff8
我們可以看到local_static_int也分布在422000 - 426000之間的.data可讀寫數(shù)據(jù)節(jié)中, 而local_int和pValue則都存儲在13e000 - 140000之間的堆棧區(qū)域上。

而指針pValue所指向的地址0x02248ff8我們可以通過!address 
0x02248ff8命令來分析, 結(jié)果是:
0:000> !address 0x02248ff8

Usage:                  Heap
Allocation Base:        021d0000
Base Address:           02248000
End Address:            02249000
Region Size:            00001000
Type:                   00020000    MEM_PRIVATE
State:                  00001000    MEM_COMMIT
Protect:                00000004    PAGE_READWRITE
More info:              !heap -p 0x21d1000
More info:              !heap -p -a 0x2248ff8
可以看到地址0x02248ff8是在堆(heap)上面。

通過上面的分析,我們驗證了平時C++書上關(guān)于各種類型變量存儲區(qū)域的假設(shè),簡單來說就是全局變量和靜態(tài)變量會被編譯到可執(zhí)行文件的數(shù)據(jù)節(jié)(分只讀和可讀寫)中, 非靜態(tài)的局部變量則分配在堆棧(stack)上,而new(malloc)出來的內(nèi)存則分配在堆(heap)上。
posted on 2012-09-20 21:57 Richard Wei 閱讀(2491) 評論(0)  編輯 收藏 引用 所屬分類: C++
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            夜夜狂射影院欧美极品| 亚洲免费成人av| 韩国美女久久| 亚洲视频网在线直播| 美腿丝袜亚洲色图| 亚洲一区免费观看| 欧美日韩黄视频| 亚洲精品视频在线观看网站| 久久综合图片| 亚洲欧美日韩另类| 国产精品欧美经典| 亚洲欧美在线x视频| 99精品国产在热久久| 久久一区二区三区av| 狠狠久久亚洲欧美专区| 久久久91精品国产| 欧美在线免费观看视频| 国产有码一区二区| 乱中年女人伦av一区二区| 欧美尤物一区| 狠狠色狠狠色综合日日tαg| 欧美专区在线观看| 伊人久久av导航| 久久综合伊人| 久久久久久电影| 亚洲高清一二三区| 亚洲国产天堂久久综合| 欧美成人免费大片| 亚洲日本va午夜在线影院| 亚洲国产精品电影| 欧美日韩国产一区二区| 亚洲欧美激情视频在线观看一区二区三区| 一本久久综合亚洲鲁鲁五月天| 欧美日韩国产一中文字不卡| 亚洲网站在线看| 亚洲欧美日韩精品久久奇米色影视| 国产色综合久久| 久久亚洲免费| 欧美激情女人20p| 这里只有精品在线播放| 亚洲综合色网站| 在线播放中文一区| 亚洲美女啪啪| 狠狠色综合网| 亚洲激情网站免费观看| 国产精品久久久久99| 久久人人97超碰人人澡爱香蕉| 久久一区二区三区四区| 中文网丁香综合网| 久久精品国产久精国产爱| 91久久久国产精品| 午夜精品久久久| 亚洲三级免费观看| 亚洲欧美成aⅴ人在线观看| 亚洲成人中文| 一区二区三区精密机械公司 | 午夜精品久久久久久久久久久久| 国产一区二区黄| 亚洲精品日韩精品| 国产在线高清精品| 亚洲欧洲一区二区三区在线观看| 国产精品一区二区三区四区五区| 免费日韩成人| 欧美日一区二区在线观看| 久久久久久网| 国产精品高精视频免费| 美女啪啪无遮挡免费久久网站| 欧美日韩999| 免费日韩av电影| 国产一区二区三区自拍| 国产精品99久久久久久久久| 亚洲福利视频在线| 欧美一区二区三区四区视频| 一区二区三区视频在线观看 | 亚洲欧洲日夜超级视频| 一区二区av| 99re6热在线精品视频播放速度 | 久久一区二区精品| 久久国产高清| 欧美日韩一区二区在线观看| 欧美手机在线视频| 免费中文日韩| 欧美一级一区| 欧美精品成人一区二区在线观看| 久久影院午夜片一区| 国产麻豆9l精品三级站| av成人天堂| 一本大道久久精品懂色aⅴ| 美女在线一区二区| 欧美.日韩.国产.一区.二区| 国产一区二区精品丝袜| 亚洲一区二区三区在线观看视频| 亚洲视频第一页| 国产精品大全| 亚洲天堂av电影| 欧美一区二区三区在线视频| 国产精品麻豆成人av电影艾秋| 亚洲久久一区| 亚洲一区国产精品| 国产精品久久久久久久久久久久久久| 亚洲精品国产精品乱码不99| 亚洲日本欧美| 欧美日韩人人澡狠狠躁视频| 亚洲乱码国产乱码精品精可以看 | 在线亚洲一区观看| 欧美日韩国产系列| 亚洲视频网站在线观看| 西西裸体人体做爰大胆久久久| 国产精品久久午夜| 欧美一区91| 欧美成人黑人xx视频免费观看| 最新日韩中文字幕| 欧美另类videos死尸| 亚洲视频一区在线| 久久精品一区二区国产| 亚洲第一偷拍| 欧美三级乱人伦电影| 欧美一进一出视频| 欧美黄色精品| 亚洲欧美激情视频| 永久域名在线精品| 欧美精品福利视频| 亚洲一区三区电影在线观看| 久久久久久精| av不卡免费看| 狠狠综合久久av一区二区小说 | 国产精品久久久久久久久免费| 亚洲性人人天天夜夜摸| 久久激情网站| 日韩视频免费| 国产亚洲激情在线| 欧美国产日韩一区二区三区| 亚洲天天影视| 欧美第一黄网免费网站| 亚洲影院免费| 亚洲国产一区在线观看| 国产精品久久久久国产a级| 久久精品国产一区二区电影| 亚洲乱码久久| 欧美国产日韩一二三区| 亚洲欧美国产视频| 亚洲片在线资源| 国产欧美日韩中文字幕在线| 欧美国产激情| 欧美中文字幕在线播放| 亚洲美女福利视频网站| 久久性天堂网| 艳妇臀荡乳欲伦亚洲一区| 欧美中在线观看| 日韩西西人体444www| 久久精品青青大伊人av| 亚洲黄色三级| 久久成人av少妇免费| 99人久久精品视频最新地址| 国产毛片一区| 欧美日韩国产电影| 久久天天躁狠狠躁夜夜爽蜜月| 亚洲一区二区在线观看视频| 欧美激情二区三区| 久久久久青草大香线综合精品| 亚洲一区二区三区乱码aⅴ| 亚洲精品久久久久久久久久久久| 国产视频精品xxxx| 国产精品视频一区二区三区| 欧美日韩岛国| 欧美另类久久久品| 欧美成人小视频| 美国十次了思思久久精品导航| 欧美诱惑福利视频| 亚洲欧美亚洲| 亚洲欧美国产视频| 亚洲一卡二卡三卡四卡五卡| 日韩视频免费观看高清在线视频| 亚洲二区三区四区| 亚洲国产成人91精品| 欧美激情精品久久久久久变态| 久久亚洲捆绑美女| 欧美freesex8一10精品| 免费欧美日韩| 亚洲电影中文字幕| 亚洲激精日韩激精欧美精品| 亚洲成色777777女色窝| 免播放器亚洲一区| 久久综合网hezyo| 欧美成人乱码一区二区三区| 免费高清在线视频一区·| 免费在线观看一区二区| 免费观看成人| 亚洲欧洲一区二区在线播放| 亚洲精品影院在线观看| 在线视频你懂得一区| 亚洲在线观看视频| 久久精品最新地址| 久久午夜激情| 欧美高清免费| 国产精品久久久亚洲一区| 国产目拍亚洲精品99久久精品| 国产日韩专区在线| 亚洲区免费影片| 亚洲欧美日韩国产一区二区三区 |