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

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

下面我們嘗試分析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;
}

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

我們直接用WinDbg以源碼的方式調試我們的測試程序consoleTest.exe.
首先我們分析下consoleTest.exe模塊的起始地址及內部數據節的分布情況, 通過!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模塊在內存中的起始地址是0x400000, 接下來可以通過!dh 0x400000分析它內部的數據節分布, 并且最終我們可以得出如下結論:
地址 400000 - 401000 : PE文件頭,屬性是只讀
地址 401000 - 41d000 : .text, 屬性是只讀可執行,表示代碼節
地址 41d000 -  422000 : .rdata, 屬性是只讀, 表示只讀數據
地址 422000 -  426000 : .data, 屬性是寫入時拷貝,表示可讀寫數據
地址 426000 - 427000 : .rsrc, 屬性是只讀,表示資源節

通過!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

接下來我們首先分析所有全局變量的存儲區域, 通過x consoletest!global*命令,讓調試器列出所有在consoletest模塊中global開頭的調試符號:
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可讀寫數據節中。
而global_const_string所指向的內容
0x0041d1dc "hello world"
則分布在41d000 -  422000 之間的.rdata只讀數據節中,這個結論也符合我們平時關于全局變量存儲區域的理解。

下面我們再嘗試分析局部變量的存儲區域,再main函數內部cout的地方設置斷點,然后讓程序運行到此, 然后輸入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可讀寫數據節中, 而local_int和pValue則都存儲在13e000 - 140000之間的堆棧區域上。

而指針pValue所指向的地址0x02248ff8我們可以通過!address 
0x02248ff8命令來分析, 結果是:
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++書上關于各種類型變量存儲區域的假設,簡單來說就是全局變量和靜態變量會被編譯到可執行文件的數據節(分只讀和可讀寫)中, 非靜態的局部變量則分配在堆棧(stack)上,而new(malloc)出來的內存則分配在堆(heap)上。
posted on 2012-09-20 21:57 Richard Wei 閱讀(2493) 評論(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>
            狠狠爱成人网| 亚洲免费观看高清完整版在线观看熊 | 美女露胸一区二区三区| 狠狠色伊人亚洲综合成人| 久久一区二区三区国产精品| 欧美有码在线视频| 影音先锋亚洲精品| 亚洲人成77777在线观看网| 欧美成人高清视频| 亚洲性图久久| 香蕉成人久久| 亚洲人成网站在线播| 亚洲日本欧美日韩高观看| 欧美午夜视频| 美女脱光内衣内裤视频久久影院| 久久久一区二区三区| 日韩一级在线| 午夜精品久久久| 亚洲国产欧美不卡在线观看| 亚洲精品欧美极品| 国产日韩亚洲欧美精品| 欧美成人精品影院| 国产精品福利网站| 免费亚洲视频| 国产精品久久久久久久久久妞妞 | 老司机午夜精品| 欧美日本网站| 葵司免费一区二区三区四区五区| 欧美激情一区二区三区成人 | 日韩一级黄色大片| 欧美在线视频观看免费网站| 亚洲美女视频在线观看| 欧美亚洲视频在线观看| 99在线精品观看| 久久国产一区二区| 亚洲午夜在线| 欧美/亚洲一区| 欧美一区二区在线| 欧美日韩免费一区| 免费久久99精品国产自| 国产精品日韩在线观看| 亚洲日韩视频| 韩国av一区二区三区| 一区二区三区毛片| 亚洲激情中文1区| 欧美在线日韩| 亚洲男女自偷自拍| 欧美极品aⅴ影院| 免费在线看一区| 国内视频精品| 午夜精彩国产免费不卡不顿大片| 一区二区91| 欧美精品一卡二卡| 亚洲成色精品| 亚洲国产成人精品久久| 欧美一级视频精品观看| 欧美亚洲网站| 国产精品一区在线观看你懂的| 亚洲毛片视频| 一区二区三区久久精品| 欧美区日韩区| 亚洲免费观看高清完整版在线观看熊| 亚洲第一伊人| 欧美+亚洲+精品+三区| 你懂的国产精品永久在线| 一区精品在线| 美女脱光内衣内裤视频久久影院 | 在线日韩成人| 久久久久久穴| 另类春色校园亚洲| 狠狠色伊人亚洲综合网站色| 欧美一级在线亚洲天堂| 久久久久国产精品厨房| 极品少妇一区二区三区| 久久久精品日韩| 欧美岛国激情| 99精品福利视频| 国产精品www994| 午夜视黄欧洲亚洲| 久久久一二三| 亚洲黄色一区| 欧美日韩精品一区二区天天拍小说| 亚洲精品1区| 亚洲综合精品一区二区| 国产美女一区二区| 久久精品国产欧美激情| 欧美韩国日本一区| 亚洲网在线观看| 国产麻豆91精品| 久久一区二区视频| 亚洲精品视频免费观看| 性做久久久久久久久| 激情亚洲一区二区三区四区| 欧美 日韩 国产在线| 一本久道综合久久精品| 久久久精品国产一区二区三区| 影音先锋久久久| 欧美日韩大片| 久久国产精品久久久久久久久久| 狼人社综合社区| 宅男精品视频| 国产一区二区高清不卡| 欧美国产日韩一区| 欧美一区成人| 亚洲免费精品| 久久视频精品在线| 一本一本久久a久久精品综合妖精| 国产欧美日韩在线播放| 欧美成人中文字幕| 久久国产99| 一区二区三区欧美激情| 女生裸体视频一区二区三区| 亚洲自拍另类| 亚洲精品日韩综合观看成人91| 国产精品日韩久久久| 欧美xxx成人| 欧美一区二区黄色| 99一区二区| 亚洲第一免费播放区| 久久九九精品| 午夜精品久久久久久久| 亚洲乱码国产乱码精品精98午夜 | 欧美精品www| 老妇喷水一区二区三区| 欧美一区二区视频在线观看2020| 日韩视频免费观看| 91久久久久久久久久久久久| 免费永久网站黄欧美| 久久成人综合视频| 亚洲欧美另类中文字幕| 在线性视频日韩欧美| 亚洲国产精品久久久久秋霞蜜臀 | 国产精品专区h在线观看| 欧美精品一区二区三区在线播放| 久久国产欧美日韩精品| 性色av一区二区怡红| 亚洲一区日本| 亚洲一区久久久| 亚洲专区免费| 亚洲一区国产视频| 亚洲淫性视频| 亚洲欧美电影院| 亚洲欧美国产视频| 亚洲欧美日韩另类精品一区二区三区 | 在线观看91精品国产麻豆| 国语自产在线不卡| 在线不卡亚洲| 亚洲国产精品t66y| 亚洲黄色视屏| 中文亚洲视频在线| 亚洲女人天堂av| 欧美专区福利在线| 久久久青草婷婷精品综合日韩 | 亚洲欧洲中文日韩久久av乱码| 亚洲成人自拍视频| 亚洲精品免费看| 亚洲神马久久| 小辣椒精品导航| 久久久久国色av免费看影院| 久久伊伊香蕉| 亚洲黄色免费网站| 9色精品在线| 新狼窝色av性久久久久久| 欧美主播一区二区三区美女 久久精品人| 先锋亚洲精品| 久久在线精品| 欧美理论片在线观看| 欧美日韩中文字幕精品| 国产精品视频免费观看| 国产字幕视频一区二区| 亚洲激情另类| 羞羞色国产精品| 欧美成年人视频| 一区二区三区成人精品| 欧美一区国产在线| 欧美精品一区二区三区蜜桃 | 亚洲精品久久在线| 西瓜成人精品人成网站| 久久综合免费视频影院| 亚洲精品综合久久中文字幕| 亚洲欧美日韩视频一区| 老司机午夜精品| 国产精品视频大全| 亚洲激情成人网| 欧美永久精品| 91久久久国产精品| 欧美亚洲日本一区| 欧美日韩一区高清| 在线精品观看| 欧美呦呦网站| 日韩亚洲欧美一区| 乱中年女人伦av一区二区| 国产欧美一区二区三区另类精品| 91久久亚洲| 久久久女女女女999久久| 99www免费人成精品| 久久这里只有精品视频首页| 国产裸体写真av一区二区| 一区二区三区视频观看| 欧美国产激情|