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

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

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

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

我們直接用WinDbg以源碼的方式調(diào)試我們的測(cè)試程序consoleTest.exe.
首先我們分析下consoleTest.exe模塊的起始地址及內(nèi)部數(shù)據(jù)節(jié)的分布情況, 通過(guò)!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, 接下來(lái)可以通過(guò)!dh 0x400000分析它內(nèi)部的數(shù)據(jù)節(jié)分布, 并且最終我們可以得出如下結(jié)論:
地址 400000 - 401000 : PE文件頭,屬性是只讀
地址 401000 - 41d000 : .text, 屬性是只讀可執(zhí)行,表示代碼節(jié)
地址 41d000 -  422000 : .rdata, 屬性是只讀, 表示只讀數(shù)據(jù)
地址 422000 -  426000 : .data, 屬性是寫(xiě)入時(shí)拷貝,表示可讀寫(xiě)數(shù)據(jù)
地址 426000 - 427000 : .rsrc, 屬性是只讀,表示資源節(jié)

通過(guò)!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

接下來(lái)我們首先分析所有全局變量的存儲(chǔ)區(qū)域, 通過(guò)x consoletest!global*命令,讓調(diào)試器列出所有在consoletest模塊中g(shù)lobal開(kāi)頭的調(diào)試符號(hà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
通過(guò)分析我們可以看到我們的3個(gè)全局變量global_const_string, global_int, global_static_int全都分布在422000 - 426000之間的.data可讀寫(xiě)數(shù)據(jù)節(jié)中。
而global_const_string所指向的內(nèi)容
0x0041d1dc "hello world"
則分布在41d000 -  422000 之間的.rdata只讀數(shù)據(jù)節(jié)中,這個(gè)結(jié)論也符合我們平時(shí)關(guān)于全局變量存儲(chǔ)區(qū)域的理解。

下面我們?cè)賴L試分析局部變量的存儲(chǔ)區(qū)域,再main函數(shù)內(nèi)部cout的地方設(shè)置斷點(diǎn),然后讓程序運(yùn)行到此, 然后輸入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可讀寫(xiě)數(shù)據(jù)節(jié)中, 而local_int和pValue則都存儲(chǔ)在13e000 - 140000之間的堆棧區(qū)域上。

而指針pValue所指向的地址0x02248ff8我們可以通過(guò)!address 
0x02248ff8命令來(lái)分析, 結(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)上面。

通過(guò)上面的分析,我們驗(yàn)證了平時(shí)C++書(shū)上關(guān)于各種類(lèi)型變量存儲(chǔ)區(qū)域的假設(shè),簡(jiǎn)單來(lái)說(shuō)就是全局變量和靜態(tài)變量會(huì)被編譯到可執(zhí)行文件的數(shù)據(jù)節(jié)(分只讀和可讀寫(xiě))中, 非靜態(tài)的局部變量則分配在堆棧(stack)上,而new(malloc)出來(lái)的內(nèi)存則分配在堆(heap)上。
posted on 2012-09-20 21:57 Richard Wei 閱讀(2493) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): 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>
            一区二区三区高清不卡| 国产精品―色哟哟| 一区二区欧美日韩| 在线性视频日韩欧美| 国产丝袜一区二区| 亚洲国产精品综合| 国产亚洲一区二区三区| 亚洲国产精品成人| 国产一区二区电影在线观看| 欧美成人精品在线| 国产精品a久久久久| 美女精品在线观看| 欧美午夜片在线观看| 欧美一进一出视频| 欧美xx视频| 久久久美女艺术照精彩视频福利播放| 麻豆视频一区二区| 久久精品视频播放| 国产精品电影网站| 亚洲第一页自拍| 国产精品揄拍500视频| 亚洲激情视频| 1000部国产精品成人观看| 亚洲网站在线| 亚洲网站视频| 欧美高清一区二区| 欧美成人免费观看| 国精产品99永久一区一区| 亚洲视频播放| 亚洲视频在线一区| 欧美日本中文字幕| 久久aⅴ国产欧美74aaa| 欧美日在线观看| 亚洲国产中文字幕在线观看| 曰韩精品一区二区| 香蕉久久夜色精品国产| 亚洲欧美美女| 国产精品vip| 妖精成人www高清在线观看| 亚洲人成绝费网站色www| 久久久蜜桃一区二区人| 另类av一区二区| 国产日韩欧美a| 在线视频日韩精品| 亚洲欧美日韩国产中文| 国产精品www994| 亚洲婷婷在线| 午夜精品视频在线观看一区二区| 欧美日韩一区不卡| 日韩视频久久| 亚洲欧美日本国产专区一区| 野花国产精品入口| 一区二区三区黄色| 欧美视频专区一二在线观看| 日韩亚洲国产欧美| 亚洲欧美美女| 国产午夜精品全部视频在线播放 | 欧美激情视频在线播放| 亚洲国产精品久久久| 欧美大片一区二区三区| 亚洲日韩欧美视频一区| 亚洲网站在线观看| 国产精品一区在线观看| 欧美一区二区三区四区在线观看| 久久精品国产999大香线蕉| 国产视频一区在线| 欧美成人精品h版在线观看| 亚洲欧洲一级| 午夜久久tv| 国内精品一区二区三区| 免播放器亚洲一区| 亚洲美女毛片| 久久成年人视频| 亚洲国内自拍| 欧美三级视频在线观看| 午夜视频一区在线观看| 久久琪琪电影院| 亚洲理论在线观看| 国产精品视频导航| 狂野欧美激情性xxxx| 一片黄亚洲嫩模| 老巨人导航500精品| 亚洲免费观看高清完整版在线观看| 欧美午夜欧美| 久久av资源网| 亚洲国产色一区| 亚洲午夜国产一区99re久久 | 亚洲人妖在线| 国产精品成人观看视频国产奇米| 午夜日本精品| 日韩视频永久免费| 久久视频在线看| 亚洲一区二区三区四区中文 | 免费短视频成人日韩| 99精品久久久| 在线观看福利一区| 国产精品美女主播| 免费亚洲电影在线| 午夜日韩视频| 一本综合久久| 亚洲激情网站免费观看| 久久久精品午夜少妇| 亚洲图片在区色| 亚洲激情在线播放| 国产一区成人| 国产精品综合色区在线观看| 欧美日韩国产成人| 久久久国产精品亚洲一区| 亚洲精品久久久久久久久久久久| 久久精品二区亚洲w码| 亚洲在线播放电影| 亚洲九九精品| 亚洲区一区二| 亚洲国产经典视频| 极品日韩av| 国内精品视频在线播放| 欧美日韩国产首页在线观看| 狂野欧美激情性xxxx欧美| 欧美亚洲网站| 先锋影音一区二区三区| 亚洲一区二区三区激情| 日韩亚洲成人av在线| 亚洲国产成人av在线| 欧美大片在线观看一区| 欧美一区免费视频| 亚洲美女视频网| 亚洲国内在线| 亚洲第一福利在线观看| 娇妻被交换粗又大又硬视频欧美| 国产一区亚洲| 国产欧美在线视频| 国产日韩亚洲| 国产视频一区在线观看| 国产亚洲精品一区二555| 国产精品va在线播放我和闺蜜| 国产精品vvv| 国产精品区一区二区三区| 欧美日韩一区二区在线观看| 欧美激情精品| 欧美午夜在线| 国产色综合网| 樱桃成人精品视频在线播放| 狠狠色香婷婷久久亚洲精品| 在线观看日韩专区| 亚洲乱码国产乱码精品精可以看| 亚洲乱码国产乱码精品精98午夜| 一本一本久久a久久精品牛牛影视| 午夜一区二区三区不卡视频| 久久久999| 欧美激情bt| 99精品视频免费| 一本久久a久久精品亚洲| 久久精品一区二区三区不卡牛牛 | 久久国产视频网站| 久久亚洲综合色| 欧美精品一区二区三区在线播放| 欧美日韩在线播放一区二区| 国产精品人人做人人爽人人添| 亚洲高清成人| 亚洲一区二区三区中文字幕在线| 欧美在线91| 欧美福利在线观看| 国产精品99久久久久久人| 欧美+日本+国产+在线a∨观看| 欧美日韩国产一中文字不卡| 国产欧美精品日韩精品| 亚洲国产精选| 亚洲视频欧美视频| 亚洲福利久久| 午夜精品久久| 欧美激情aⅴ一区二区三区| 国产精品午夜av在线| 一区二区三区日韩欧美| 久久国产主播| av成人毛片| 蜜桃伊人久久| 国产视频在线观看一区| 99亚洲视频| 午夜视频一区在线观看| 欧美国产精品| 欧美一区三区二区在线观看| 欧美精品在线播放| 伊人男人综合视频网| 久久久久久亚洲精品杨幂换脸| 亚洲精品一区二| 久久亚洲国产精品日日av夜夜| 国产精品拍天天在线| 狠狠狠色丁香婷婷综合久久五月 | 日韩亚洲在线| 男人的天堂亚洲在线| 午夜精品美女自拍福到在线| 欧美激情免费在线| 亚洲人成网在线播放| 久久视频精品在线| 亚洲一区二区三| 欧美福利视频网站| 亚洲美女福利视频网站| 欧美韩国日本一区| 久久久久久**毛片大全| 国产精品video|