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

            的筆記

            隨時(shí)隨地編輯

            VC反匯編筆記一

            VC反匯編筆記一                

            對(duì)幾個(gè)最基礎(chǔ)的c++和對(duì)應(yīng)的反匯編羅列了下,有的有簡(jiǎn)要注釋?zhuān)瑳](méi)注釋的是一些常規(guī)形態(tài)。掛在網(wǎng)上,隨時(shí)方便參考回顧??吹臅r(shí)候可以參考上一篇《函數(shù)反匯編之函數(shù)創(chuàng)建和恢復(fù)現(xiàn)場(chǎng)》
            http://www.shnenglu.com/flyindark/archive/2012/01/09/163895.html
             

            1  堆棧上分配內(nèi)存

            本質(zhì)是在ES上分配一個(gè)空間,并用一個(gè)標(biāo)識(shí)符表示起始的地址(這里是string),然后初始化的時(shí)候?qū)⒊A繀^(qū)的內(nèi)容復(fù)制到這個(gè)分配的空間上。這個(gè)ES堆棧空間用BP、SP定位。

             
             

            2  常量空間和堆??臻g

             

              

            3  /GS開(kāi)關(guān)

            3.1  SOURCE

            __security_cookie

            http://msdn.microsoft.com/en-us/library/ms235362(v=vs.80).aspx

             

            /GS (Buffer Security Check)

            http://msdn.microsoft.com/en-us/library/8dbf701c(v=VS.80).aspx

            Detects some buffer overruns that overwrite the return address, a common technique for exploiting code that does not enforce buffer size restrictions. This is achieved by injecting security checks into the compiled code.

             

            /GS(緩沖區(qū)安全檢查)

            http://msdn.microsoft.com/zh-cn/library/8dbf701c(v=vs.90).aspx

            檢測(cè)某些覆蓋返回地址的緩沖區(qū)溢出,這是一種利用不強(qiáng)制緩沖區(qū)大小限制的代碼的常用技術(shù)。這是通過(guò)將安全檢查插入到已編譯代碼中完成的。

             

            /Gs (Control Stack Checking Calls)

            http://msdn.microsoft.com/en-US/library/9598wk25(v=vs.80).aspx

            Controls stack probes.

             

            /Gs(控制堆棧檢查調(diào)用)

            http://msdn.microsoft.com/zh-cn/library/9598wk25(v=vs.90).aspx

            控制堆棧探測(cè)。

             

            check_stack

            http://msdn.microsoft.com/zh-cn/library/ybwsy5f9(v=vs.90).aspx

            Instructs the compiler to turn off stack probes if off (or –) is specified, or to turn on stack probes if on (or +) is specified.


            注意大小寫(xiě),
            GSGs是不一樣的,中文文檔里有些小錯(cuò)誤,關(guān)閉GS掉了“-”。

            編譯器進(jìn)行判斷的,像函數(shù)里定義了char數(shù)組,后面又用字符串操作函數(shù)進(jìn)行了一定的操作,就說(shuō)明

            可能存在溢出。編譯器在編譯這個(gè)函數(shù)里的時(shí)候就加上security cookie的保護(hù)。

             GS默認(rèn)是開(kāi)

            /GS

            /GS-


            GS開(kāi)后,編譯器插了三行代碼,目的是ebp-4放了一個(gè)4字節(jié)的保護(hù)數(shù),防止向堆棧空間的string地址中寫(xiě)入時(shí)越界(當(dāng)然是想當(dāng)然的看法,具體細(xì)節(jié)還不是很清楚)。

              

            4  堆棧變量分配空間初始化的區(qū)別



            曾見(jiàn)過(guò)爭(zhēng)論
            {0}{}那個(gè)效率更高的;這個(gè)堆棧變量的初始化竟然要這么多指令,以后256以上的空間還是需要memset了,抑或聽(tīng)說(shuō)release時(shí)編譯器可能會(huì)優(yōu)化了;

              

            5  函數(shù)調(diào)用

            5.1  現(xiàn)象快照

             

             

            進(jìn)入調(diào)用函數(shù)前

            +            &string 0x001ff8dc char [6]*

            +            &string2       0x001ff8d0 char * *

                          ebp 0x001ff8e8 unsigned long

                          esp 0x001ff7dc unsigned long

            +            &x 0x001ff8c4 int *

            +            &y 0x001ff8b8 int *

             

            進(jìn)入調(diào)用函數(shù)第一條指令

                          ebp 0x001ff8e8 unsigned long

                          esp 0x001ff7d0 unsigned long

            +            &a 0x001ff7d4 int *

            +            &b 0x001ff7d8 int *

            5.2  總結(jié)

            函數(shù)名是函數(shù)地址的標(biāo)識(shí)符

            參數(shù)地址是常量空間地址,例如這里的&string2、&x、&y&a&b

            參數(shù)是從右向左的順序傳遞的,先處理倒數(shù)第一個(gè)參數(shù)

            參數(shù)傳值的時(shí)候折騰了下,先將常量傳到標(biāo)識(shí)符(y),然后將y傳遞到EAX,然后將EAX壓棧。跟著是第一個(gè)參數(shù)x類(lèi)似。

            調(diào)用前的參數(shù)入棧后,參數(shù)所在的地址就是調(diào)用的函數(shù)的參數(shù)的標(biāo)識(shí)符。這里就免得參數(shù)被多次賦值。

            函數(shù)返回值放到EAX里了。

            壓入了2個(gè)int參數(shù),返回后ESP要加8

             

            6  返回結(jié)構(gòu)體

            分析返回結(jié)構(gòu)體的情形

            6.1  簡(jiǎn)單結(jié)構(gòu)體

             

             

             

            posted on 2012-02-01 14:43 的筆記 閱讀(1329) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): C++

            偷窥少妇久久久久久久久| 久久香蕉国产线看观看99| 亚洲AV无码1区2区久久| 久久精品无码午夜福利理论片| 久久99国产精品久久99果冻传媒| 久久一区二区免费播放| 久久精品国产亚洲AV无码麻豆 | 色综合久久中文综合网| 色婷婷狠狠久久综合五月| 97精品久久天干天天天按摩| 日韩一区二区三区视频久久| 国内精品伊人久久久久av一坑| 午夜福利91久久福利| 狠色狠色狠狠色综合久久| 香蕉久久久久久狠狠色| 66精品综合久久久久久久| 无码专区久久综合久中文字幕| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 色诱久久久久综合网ywww| 国产99久久久国产精品~~牛| 人妻无码中文久久久久专区| 无码8090精品久久一区| 国产69精品久久久久9999| 91精品国产综合久久久久久| 漂亮人妻被中出中文字幕久久| 国内精品久久久久久久涩爱 | 亚洲AV无码久久精品蜜桃| 四虎影视久久久免费观看| 精品久久久久一区二区三区 | 亚洲午夜福利精品久久| 久久久久久久综合日本| 成人精品一区二区久久| 久久国产精品-久久精品| 精品国际久久久久999波多野| 狠狠色婷婷久久一区二区 | 一级做a爰片久久毛片人呢| 国产亚洲欧美成人久久片| 99久久国产热无码精品免费| 国产精品9999久久久久| 久久久久久亚洲精品成人| 久久久久久九九99精品|