• <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>

            沒畫完的畫

            喂馬 劈柴 BBQ~
            posts - 37, comments - 55, trackbacks - 0, articles - 0
              C++博客 ::  :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            第一集中,終于知道調(diào)用函數(shù) func1() 之后,就分配了堆棧的空間,然后將堆棧空間的內(nèi)容初始化為 0xCC
            ------------------------------------------------------------------------------------------------
            6:        int j;
            7:        char c;
            8:        short k;
            9:
            10:       j = 0;
            00401038   mov         dword ptr [ebp-4],0
            11:       c = 'a';
            0040103F   mov         byte ptr [ebp-8],61h
            12:       k = 1;
            00401043   mov         word ptr [ebp-0Ch],offset func1+27h (00401047)
            13:
            14:       printf("sum=%d\n", input1+input2);
            00401049   mov         eax,dword ptr [ebp+8]
            0040104C   add         eax,dword ptr [ebp+0Ch]
            0040104F   push        eax
            00401050   push        offset string "sum=%d\n" (0042201c)
            00401055   call        printf (00401130)
            0040105A   add         esp,8
            15:
            16:       return;
            17:   }
            0040105D   pop         edi
            0040105E   pop         esi
            0040105F   pop         ebx
            00401060   add         esp,4Ch
            00401063   cmp         ebp,esp
            00401065   call        __chkesp (004011b0)
            0040106A   mov         esp,ebp
            0040106C   pop         ebp
            0040106D   ret
            ------------------------------------------------------------------------------------------------
            上面代碼為 將堆棧初始化為 0xCC 之后的代碼
            程序是如何讀取 [函數(shù)內(nèi)部的局部變量] 和 [入口參數(shù)] 的呢?
             
            首先看下[入口參數(shù)],
            在上一集,知道在調(diào)用 func1()  之前,參數(shù)已經(jīng) push 到堆棧了
             
            ebp 為 棧內(nèi)存基地址, 即棧底
            esp 為 當(dāng)前的棧頂?shù)刂?br>在內(nèi)存中 棧底處于高地址,棧頂處于底地址
             
            10:       j = 0;
            00401038   mov         dword ptr [ebp-4],0          ; 放至于 [ebp] - 4  的地址
            11:       c = 'a';
            0040103F   mov         byte ptr [ebp-8],61h         ; 主至于 [ebp] - 8 的地址,這里雖然 c 只需占用一個字節(jié),但實際上它占用了四個字節(jié),
                                                                               ; 因為編譯器作了優(yōu)化,傳說中的“字節(jié)對齊”
            12:       k = 1;
            00401043   mov         word ptr [ebp-0Ch],offset func1+27h (00401047)
             
            當(dāng)執(zhí)行完 0040103F   mov         byte ptr [ebp-8],61h 后,
            -------------------------------------------------------
             EAX = CCCCCCCC EBX = 7FFD3000 ECX = 00000000
             EDX = 00000002 ESI = 00000000 EDI = 0012FF14
             EIP = 00401043 ESP = 0012FEBC EBP = 0012FF14
            -------------------------------------------------------
            0012FF06  CC CC CC CC CC CC 61  燙燙燙a
            0012FF0D  CC CC CC 00 00 00 00  燙.....
            0012FF14  80 FF 12 00 E4 10 40  ......@
             
            從內(nèi)存的內(nèi)容不難看出,c實際上占用了四個字節(jié),而多余的三個字節(jié)依然還是 0xCC 的內(nèi)容
             
            在執(zhí)行這一句之前,
            mov         word ptr [ebp-0Ch],offset func1+27h (00401047)
            offset 是編譯器提供的偽指令,它不是真正的cpu指令,他被編譯器執(zhí)行。
            而 lea 是cpu指令,他被cpu執(zhí)行。
            一般情況下offset 跟mov連用的!而lea是直接使的!
             
            mov dx, offset buf
            lea   dx, buf
            ---------------------------------------
            編譯以后:
            mov dx, 0004h    ;相對地址
            lea   dx, [0061h] ;DS:[0061h]

            突然發(fā)現(xiàn)匯編指令的尋址方式忘光了,  offset 都忘記是干嘛的
            好困,需要~~~需要先睡一會~~

            Feedback

            # re: 函數(shù)堆棧是這么回事 第2集  回復(fù)  更多評論   

            2008-09-28 08:35 by 908971
            不錯的內(nèi)容,支持

            # re: 函數(shù)堆棧是這么回事 第2集  回復(fù)  更多評論   

            2008-09-28 09:22 by ljbxc
            呵呵,有點一休的風(fēng)格
            久久精品国产精品青草| 久久精品无码一区二区WWW| 无码AV波多野结衣久久| 国产精品女同久久久久电影院| 欧洲成人午夜精品无码区久久| 亚洲中文久久精品无码ww16| 国产精品一区二区久久| 久久99精品久久久久久9蜜桃| 欧美精品一区二区久久| 久久综合狠狠综合久久| 色偷偷888欧美精品久久久| 亚洲婷婷国产精品电影人久久| 综合网日日天干夜夜久久| 国产精品久久久久久久| 老司机午夜网站国内精品久久久久久久久 | 国产99久久久国产精品小说| 中文字幕人妻色偷偷久久| 中文字幕久久欲求不满| 伊人久久综合无码成人网| 精品久久久久久99人妻| 久久久久久久久无码精品亚洲日韩| 精品久久人人妻人人做精品| 区亚洲欧美一级久久精品亚洲精品成人网久久久久 | 欧美日韩精品久久免费| 久久91亚洲人成电影网站| 久久精品国产亚洲AV影院| 狠狠精品干练久久久无码中文字幕 | 国内精品久久久久久麻豆| 精品国产一区二区三区久久久狼| 久久久久久久综合综合狠狠| 久久久久久无码Av成人影院| 久久福利资源国产精品999| 国产午夜精品久久久久九九电影| 久久国产精品一国产精品金尊| 色婷婷久久综合中文久久一本| 办公室久久精品| 久久青青草原综合伊人| 久久精品aⅴ无码中文字字幕重口 久久精品a亚洲国产v高清不卡 | 精品久久久无码21p发布| 久久久久久精品无码人妻| 久久天天躁狠狠躁夜夜2020|