亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > ASM > 正文

獻(xiàn)給匯編初學(xué)者-函數(shù)調(diào)用堆棧變化分析

2019-11-17 04:37:46
字體:
供稿:網(wǎng)友
標(biāo) 題: 獻(xiàn)給匯編初學(xué)者-函數(shù)調(diào)用堆棧變化分析作 者: 墮落天才時 間: 2007-01-19,19:20鏈 接: http://bbs.pediy.com/showthread.php?threadid=38234跟一個朋友談堆棧的時候 就寫下了這段文字,順便發(fā)到這里給需要的看看吧匯編初學(xué)者比較頭痛的一個問題////////////////////////////////////////////////////////////////////比如 我們有這樣一個C函數(shù)#include<stdio.h>long test(int a,int b){    a = a + 1;    b = b + 100;    return a + b;}void main(){    Word,:VARARG  ;這個就是聲明一下我們要用的函數(shù)頭,到時候 匯編程序會自動到msvcrt.lib里面找的了                                 ;:VARARG 表后面的參數(shù)不確定 因為C就是這樣的printf(const char *, ...);                               ;這樣的函數(shù)要注重 不是被調(diào)用函數(shù)負(fù)責(zé)清棧 因為它本身不知道有多少個參數(shù)                               ;而是有調(diào)用者負(fù)責(zé)清棧  下面會具體說明.dataszTextFmt  BYTE '%d',0        ;這個是用來類型轉(zhuǎn)換的,跟C的一樣,字符用字節(jié)類型a          dword 1000         ;假設(shè)b          dword 2000         ;處理數(shù)值都用雙字 沒有int 跟long 的區(qū)別;/////////////////////////////////////////////////////////////////////////////////////////.code_test proc A:DWORD,B:DWORD       push ebp      mov  ebp,esp      mov  eax,dword ptr ss:[ebp+8]      add  eax,1      mov  edx,dword ptr ss:[ebp+0Ch]      add  edx,100      add  eax,edx      pop  ebp            retn 8_test endp_main proc       push dword ptr ds:b       ;反匯編我們看到的b就不是b了而是一個[*****]數(shù)字 dword ptr 就是我們在ds(數(shù)據(jù)段)把[*****]                                ;開始的一個雙字長數(shù)值取出來      push dword ptr ds:a       ;跟她對應(yīng)的還有 byte ptr ****就是取一個字節(jié)出來 比如這樣 mov  al,byte ptr ds:szTextFmt                                 ;就把 % 取出來 而不包括 d      call _test                        push eax                  ;假設(shè)push eax的地址是×××××      push offset szTextFmt      call printf      add  esp,8      ret             _main endpend  _main;////////////////////////////////////////////////////////////// 下面介紹堆棧的變化首先要明白的是 操作堆棧段 ss 只能用 esp或ebp寄存器 其他的寄存器eax ebx edx等都不能夠用 而 esp永遠(yuǎn)指向堆棧棧頂 ebp用來 在堆棧段里面尋址push 指令是壓棧 ESP=ESP-4pop  指令是出棧 ESP=ESP+4我們假設(shè)main函數(shù)一開始堆棧定是 ESP=400push dword ptr ds:b                 ;ESP-4=396 ->里面的值就是 2000 就是b的數(shù)值push dword ptr ds:a                 ;ESP-4=392 ->里面的值就是 1000 就是a的數(shù)值call test                           ;ESP-4=388->里面的數(shù)值是什么?這個太重要了 就是我們用來找游戲函數(shù)的原理所在。                                                 里面的數(shù)值就是call test 指令下一條指令的地址->即push eax的地址×××××到了test函數(shù)里面push ebp                           ;ESP-4=384->里面保存了當(dāng)前ebp的值 而不是把ebp清零mov  ebp,esp                       ;這里ESP=384就沒變化了,但是 ebp=esp=384,為什么要這樣做呢 因為我們要用ebp到堆棧里面找參數(shù)mov  eax,dword ptr ss:[ebp+8]      ;反匯編是這樣的 想想為什么a就是[ebp+8]呢                                   ;我們往上看看堆棧里地址392處就保存著a的值 這里ebp=384 加上8正好就是392了                                   ;這樣就把傳遞過來的1000拿了出來eax=1000add  eax,1                         ;相當(dāng)于 a+1了 eax=1001mov  edx,dword ptr ss:[ebp+0Ch]    ; 0Ch=12 一樣道理這里指向堆棧的地址是384+12=396 就是2000了 edx=2000add  edx,100                       ;相當(dāng)于 b+100 edx=2100add  eax,edx                       ;eax=eax+edx=1001+2100=3101 這里eax已經(jīng)保存了最終的結(jié)果了                                    ;因為win32匯編一般用eax返回結(jié)果 所以假如最終結(jié)果不是在eax里面的話 還要把它放到eax                                   ;比如假設(shè)我的結(jié)果保存在變量nRet里面 最后還是要這樣 mov eax,dword ptr nRetpop  ebp                           ;ESP=384+4=388 而保存在棧頂384的值 保存到 ebp中 即恢復(fù)ebp原來的值                                                          ;因為一開始我們就把ebp的值壓棧了,mov ebp,esp已經(jīng)改變了ebp的值,這里恢復(fù)就是保證了堆棧平衡retn  8                            ;ESP+8->396 這里retn是由系統(tǒng)調(diào)用的 我們不用管 系統(tǒng)會自動把Eip指針指向 原來的call的下一條指令                                   ;由于是系統(tǒng)自動恢復(fù)了call那里的壓棧所以 真正返回到的時候ESP+4就是恢復(fù)了call壓棧的堆棧                                   ;到了這個時候 ESP=400 就是函數(shù)調(diào)用開始的堆棧,就是說函數(shù)調(diào)用前跟函數(shù)調(diào)用后的堆棧是一樣的                                   ;這就是堆棧平衡 由于我們用stdcall上面retn 8就是被調(diào)用者負(fù)責(zé)恢復(fù)堆棧的意思了,函數(shù)test是被調(diào)用者,所以負(fù)責(zé)把堆棧加8,call 那里是系統(tǒng)自動恢復(fù)的push eax                ;ESP-4=396->里面保存了eax的值3101                        ;上面已經(jīng)看到了eax保存著返回值,我們要把它傳給printf也是通過堆棧傳遞       push offset szTextFmt   ;ESP-4=392->里面保存了szTextFmt的地址 也就是C里面的指針 實際上沒有什么把字符串傳遞的,我們傳的都是地址                        ;無論是在匯編或C 所以在匯編里沒有什么字符串類型 用最多的就是DWORD。嘿嘿游戲里面?zhèn)鬟f參數(shù) 簡單多了call printf             ;ESP-4=388->里面保存了下一條指令的地址add  esp,8              ;ESP+8=400 恢復(fù)了調(diào)用printf前的堆棧狀態(tài)                        ;上面說了由于printf后面參數(shù)是:VARARG 這樣的類型是有調(diào)用者恢復(fù)堆棧的 所以printf里面沒有retn 8之類的指令                        ;這是由調(diào)用者負(fù)責(zé)清棧 main是調(diào)用者 所以下面一句就是 add esp,8 把堆?;謴?fù)到調(diào)用printf之前                        ;而call printf那里的壓棧 是由系統(tǒng)做的 恢復(fù)的工作也是系統(tǒng)完成 我們不用理 只是知道里面保存是返回地址就夠                        ;了ret                     ;main 函數(shù)返回 其他的事情是系統(tǒng)自動搞定 我們不用理 任務(wù)完成
進(jìn)入討論組討論。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

日韩中文字幕不卡视频| 黄色在线免费观看网站| 小泽玛利亚一区| 欧美成人高清手机在线视频| 国产69精品久久久久久久久久| 久草在线在线精品观看| 色屁屁一区二区| 69av视频在线观看| 亚洲精品一区二区三区新线路| 天天操天天摸天天舔| 国产成人免费av一区二区午夜| 免费国产黄线在线观看视频| 久久99国产综合精品女同| 国产精品久久久久久久久久久免费看| 欧美激情在线观看视频| 爽成人777777婷婷| 国产精品久久久久三级| 四虎www成人影院观看| 日韩一级免费毛片| 青青在线视频观看| 中文字幕人妻一区二区三区| 日韩精品免费专区| 欧美色视频在线观看| 99久久精品一区二区成人| 国产精品300页| av电影在线网站| 久久国产主播精品| √天堂8资源中文在线| 91禁在线观看| 亚洲综合精品伊人久久| 欧美性xxxxxbbbbbb精品| 国产成都精品91一区二区三| 欧美资源一区| 亚洲 国产 欧美 日韩| 亚洲毛片一区| 91网站在线播放| 91精品国产乱码在线观看| 亚洲国产精品久久久久久| 天天影视综合| 日韩欧美在线观看一区二区三区| 欧美日韩在线三区| 好吊日视频在线观看| julia中文字幕一区二区99在线| 大陆极品少妇内射aaaaaa| 欧美码中文字幕在线| 91精品久久久久久久久中文字幕| 亚洲成人日韩在线| 亚洲成av人片www| 欧美日韩一区三区四区| 超薄肉色丝袜脚交一区二区| 国产日韩av网站| 色呦呦网站在线观看| 国产女人18毛片18精品| 老太脱裤让老头玩ⅹxxxx| 国产中文字幕乱人伦在线观看| 亚洲精品一区二区久| 制服丝袜专区在线| 天堂√中文在线| 精品国自产在线观看| 国产福利视频一区二区| 日韩美女在线看免费观看| 国产99久久久久久免费看农村| 无码黑人精品一区二区| 蜜桃视频在线观看一区二区| 意大利激情丛林无删减版dvd| 人人澡人一摸人人添| 一个人看的www久久| 日本暖暖在线视频| 久久久久久国产精品美女| 国产精品久久久久久9999| 黑人巨大精品欧美一区二区奶水| 亚洲色图35p| 手机在线免费看av| 成人免费网站视频www| 一区二区三区视频在线观看免费| 日本蜜桃在线观看视频| 免费av网页| 99在线观看免费视频精品观看| 国产精品黑丝在线播放| 日本成人在线网站| 美女国产一区| 国产伦精品一区二区三区免费迷| 一区二区三区国产福利| 欧美色网在线| 国产日产欧美视频| 日韩精品一区中文字幕| 日韩电影毛片| 国产三级精品三级观看| 色哟哟亚洲精品一区二区| 久久久中文字幕| 亚欧精品在线视频| 国产综合欧美| 一区二区三区在线观看国产| 国产乱子伦农村叉叉叉| 精品一级视频| 久久99蜜桃综合影院免费观看| 夜间精品视频| 国产精品va在线观看无码| 同产精品九九九| 国模叶桐国产精品一区| 亚洲男人第一av| 少妇**av毛片在线看| 欧美极品jizzhd欧美仙踪林| 免费观看中文字幕| 在线观看国产日韩| 欧美日韩播放| av超碰在线观看| 青青草国产在线观看| 激情五月婷婷久久| 91精品国产欧美一区二区成人| 91免费欧美精品| 57pao成人永久免费| 天天综合网久久| 欧美13videosex性极品| 亚洲国产三级网| a在线播放不卡| 国内精品不卡一区二区三区| а 天堂 在线| 右手影院亚洲欧美| 日本va欧美va精品| 亚洲av电影一区| 日韩成人伦理电影在线观看| 91精品人妻一区二区三区蜜桃欧美| 久久久久久91| 国产综合内射日韩久| 亚洲视频在线观看三级| 欧美日韩成人一区二区三区| 亚洲一区二区三区在线免费| 在线观看爽视频| 国产不卡精品视男人的天堂| 波多野结衣乳巨码无在线观看| 久久99精品这里精品3| 国产精品综合视频| 综合综合综合综合综合网| 国产精品视频一区二区三区| 蜜桃av一区二区在线观看| 日本xxxxwwww| 国产精品国内视频| 9999精品免费视频| 另类视频在线| 亚洲精品高清在线| 一区二区视频在线观看| 高清一区二区| 日韩精品成人在线| 国产亚洲精品久久777777| 精品无码av无码免费专区| 国产精品777| 欧美精品久久久久| 久久久久亚洲av无码专区桃色| 中文字幕中文字幕99| 伊人网伊人影院| 粗大黑人巨茎大战欧美成人| 久久久精品少妇| 久久久久国产精品嫩草影院| 日韩欧美精品一区二区综合视频| 精品91久久久| 天天搞夜夜操| 国产裸体无遮挡| 性欧美video另类hd3| 国产99久久精品一区二区 夜夜躁日日躁| 亚洲一线二线三线视频| 精品国产高清a毛片无毒不卡| 综合色天天鬼久久鬼色| 视频一区不卡| 六月丁香婷婷色狠狠久久| 国产精品天美传媒入口| 日韩精品91| 精品一区二区三区四区在线| 国产在线拍偷自揄拍精品| 欧美一区二区三区视频在线观看| 精品国产乱码久久久久久图片| 亚洲精品国产精品久久| 久久久精品一区二区三区| 欧美丰满高潮xxxx喷水动漫| 欧美在线一级va免费观看| 亚洲国产精品久久卡一| 久久精品中文字幕免费mv| 岛国大片在线播放| 久久久夜夜夜| 欧美日本在线视频| proumb性欧美在线观看| 久久久久.com| 欧美日韩一区视频| 男人天堂手机在线观看| 欧美bbbbbbbbbbbb精品| 爱爱视频网站免费| 天堂中文在线观看| 日韩免费性生活视频播放| 久久久999精品视频| 国产在线观看黄| 亚洲欧美日韩中文在线| 中文字幕日韩第一页| 午夜欧美2019年伦理| 欧美69精品久久久久久不卡| 亚洲男子天堂网| 欧美日韩国产精品一区| 岛国影视在线观看| 日韩成人精品视频在线观看| a视频在线观看免费| 在线免费av片| 国产高清在线一区二区| 精品国内亚洲2022精品成人| 欧美成人精品欧美一级乱| 日韩美女视频在线观看| 欧美老肥婆性猛交视频| 久久国产精品一区| 欧美视频网址| 日韩精品a在线观看91| 2023亚洲男人天堂| 秋霞成人午夜伦在线观看| 免费黄视频网站| 97se亚洲国产一区二区三区| 91麻豆精品国产91久久久平台| 国产区在线观看视频| 国产.精品.日韩.另类.中文.在线.播放| 精品人妻一区二区三区蜜桃视频| 国产高潮视频在线观看| 亚洲日本精品国产第一区| 久久草视频在线看| 欧美高清视频手机在在线| 国产女人高潮毛片| 国产又粗又猛又爽| 久久aⅴ国产欧美74aaa| 亚洲国产精品成人综合| 中文字幕av一区 二区| 天天操天天操一操| 色综合影院在线观看| 国产麻豆视频一区二区| 午夜av入18在线| 欧美深性狂猛ⅹxxx深喉| 国产亚洲欧美在线| 成年人影院在线观看| 91精品国产乱码久久久久久蜜臀| 欧美国产激情一区二区三区蜜月| 久久夜夜操妹子| 国产小视频国产精品| 青娱乐国产盛宴| 东热在线免费视频| 国产精品久久久久久久免费软件| 91社区在线播放| 欧美亚洲日本一区二区三区| 国产日韩精品入口| 18精品爽视频在线观看| 日本a级不卡| 久久久久久久久久成人| 久久久久av| 91久久在线视频| 真实的国产乱xxxx在线91| 人妻互换一二三区激情视频| 国内精品麻豆美女在线播放视频| 91免费精品国偷自产在线在线| 人与动性xxxxx免费视频| 7m精品国产导航在线| 亚洲一区二区福利| 一级黄色片在线免费观看| 国产一区二区三区视频在线播放| 日韩av在线中文字幕| 免费一区二区| 午夜dj在线观看高清视频完整版| 国产精品视频精品视频| 妖精视频在线观看| 最新热久久免费视频| 久久影院视频免费| 国产精品裸体一区二区三区| 亚洲影影院av| 9191精品国产综合久久久久久| 人成免费电影一二三区在线观看| 国产91精品最新在线播放| 综合激情一区| 欧美国产日韩一区二区三区| 亚洲黄色中文字幕| 97精品国产97久久久久久久久久久久| 欧美亚洲图片小说| 免费看欧美一级片| 性爱在线免费视频| 国模视频一区二区| 另类国产ts人妖高潮视频| 久久久久久久综合狠狠综合| 亚洲色图视频免费播放| 欧洲永久精品大片ww免费漫画| 日本黄色一区二区三区| 欧美激情第99页| 欧美中文字幕第一页| 亚洲欧美亚洲| 成人3d漫画免费无遮挡软件| 亚洲久色影视| 99久久婷婷国产综合精品电影√| 亚洲精品一区二区久| 97超级碰碰人国产在线观看| 久久久久久久一区二区三区| 亚洲一本大道在线| 在线观看免费视频a| 国产成人手机高清在线观看网站| 日韩视频免费看| 亚洲影视一区二区| 国产传媒一区| 久草免费资源站| 老司机福利在线观看| 亚洲视频一区二区| 国产私拍精品| 丁香六月激情综合| 日韩av在线免费| 国产三级按摩推拿按摩| 99热这里只有精品首页| 在线观看特色大片免费视频| 交视频在线观看国产| 国产一卡不卡| 极品校花啪啪激情久久| 亚洲欧美日韩精品久久| 中文字幕免费视频| 日韩av网站在线观看| 亚洲精品一区二三区不卡| 亚洲欧美另类图片| 超碰在线视屏| 里番在线播放| 女囚岛在线观看| 亚洲色成人网站www永久四虎| 亚洲人成午夜免电影费观看| 久久中文娱乐网| 欧美黑人ⅹxxx另类猛交| 国产精品jvid在线观看| 在线观看三级视频| 色欲av伊人久久大香线蕉影院| 97超碰在线视| 久久在线观看免费| 亚洲成人av电影在线| 日韩精品午夜| 久久久久99精品成人片|