日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁 > 編程 > ASM > 正文

獻給匯編初學者-函數調用堆棧變化分析

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

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

圖片精選

精品国产免费观看一区| 欧美日韩精品欧美日韩精品一| 精品国产免费视频| 中文字幕亚洲乱码| 日韩.欧美.亚洲| 日韩精品在线视频| av亚洲免费| 日韩福利视频导航| 在线精品视频免费播放| 日本亚洲视频在线| 国产欧美日韩精品综合| 精品福利在线观看| www.精品av.com| 日韩在线视频中文字幕| 午夜一区二区三区| 欧美一级免费看| 日韩精品在线免费看| 在线观看91精品国产入口| 国产激情久久久| 国产欧美日韩在线| 日韩欧美中文在线视频| 国产黄色片大全| 天天在线视频色| 快she精品国产999| 久久久久久99精品| 欧美亚洲视频在线看网址| 国产午夜精品视频免费不卡69堂| 日韩欧美久久久| 国产福利久久久| 视频一区二区精品的福利| 日韩精品在线第一页| 韩国av一区二区| www.久久久精品| 亚亚洲欧洲精品| 久久久综合精品| 精人妻一区二区三区| 亚洲国产无线乱码在线观看 | 精品中文字幕在线播放| 欧美日韩在线视频免费观看 | 国产v日产∨综合v精品视频| 在线精品日韩| 日韩精品视频在线免费观看 | 日韩欧美专区在线| 欧美日韩中国免费专区在线看| 黄色资源在线观看| 91精品国产91久久久久青草| 久久婷婷中文字幕| 国产成人精品综合久久久| 欧美日韩在线不卡| 在线观看国产一级片| 91精品免费看| 欧美日韩国产一区在线| 日本精品在线中文字幕| 日韩欧美国产成人精品免费| 91久久久精品| 在线观看91精品国产入口| 亚洲欧美日本国产专区一区| 中文字幕视频在线观看| 日本亚洲欧美| 天天摸日日摸狠狠添| 国产小视频在线| 亚洲视频一二三四| 欧美亚洲天堂网| 精品人妻一区二区三区视频| 国产高清在线一区| 91精品国产91| 免费看黄资源大全高清| 精品一性一色一乱农村| 免费视频国产一区| 日韩精品视频在线播放| 欧美日韩视频免费看| 欧美日韩在线网站| 欧美不卡一区二区| 日韩欧美国产免费| 国产91久久久久| 99热最新网址| 欧美日韩在线不卡| 日韩在线中文视频| 国产欧美日韩成人| 蜜桃久久av| 精品视频资源站| 亚洲欧美中文字幕在线观看| 日韩欧美国产三级| 欧美日韩国产片| 国产在线一在线二| 国产久卡久卡久卡久卡视频精品| 欧美日韩激情一区| 国内精品99| 精品成人久久久| 亚洲第一网中文字幕| 欧美三级视频在线| 中文字幕线观看| 中文字幕亚洲第一| 欧美 日韩 国产 在线观看| 欧美区高清在线| 欧美日韩一二| 韩国v欧美v日本v亚洲| 亚洲一级影院| a天堂在线资源| 欧美日韩在线观看一区| 亚洲一区在线观看视频| a视频在线播放| 国产成人中文字幕| 日韩视频不卡中文| 久久久精品网| 国产一级视频在线播放| 日本国产一区| 日韩亚洲国产欧美| 久久婷婷亚洲| 91国内在线| www 日韩| 99视频在线看| 国产日产一区二区三区 | 精品久久久精品| 精品三级av| 精品日韩av一区二区| av免费在线网站| 日本免费在线视频不卡一不卡二| 国产日韩精品在线观看| 国产日韩精品在线| 欧洲精品久久久| 国产成人综合av| 亚洲一区中文字幕在线观看| 国产午夜精品视频免费不卡69堂 | 99中文字幕一区| 一级网站免费观看| 92久久精品| 国产色综合网| 亚洲成年人影院在线| 91精品国产经典在线观看| 免费视频中文字幕| 二区三区中文字幕| 亚洲欧美中文字幕在线观看| 欧美99久久| 在线看欧美日韩| 中文字幕在线官网| 日韩欧美在线综合网| 欧美日韩国产不卡| 国产字幕中文| 日本免费在线视频不卡一不卡二| 国产欧美久久久精品影院| 欧美日韩视频免费| 精品欧美久久久| 91精品国产91久久久久青草| 免费精品国产自产拍观看| 日韩欧美在线网站| 91麻豆精品在线| 午夜av一区| 日韩av综合在线观看| 国产欧美日韩精品综合| 欧美日韩国产在线观看| 婷婷精品进入| 一区二区日韩视频| 欧美日韩免费不卡视频一区二区三区| 久久99精品久久久久子伦| 欧美亚洲专区| 国产不卡在线| 欧美中文字幕在线| 欧美激情一区二区三区在线| 日韩影院二区| 国产黄色一级片| 日本不卡一区在线| 午夜伊人狠狠久久| 国产裸体歌舞团一区二区| 日韩欧美亚洲视频| 日韩欧美不卡在线| 欧美国产综合在线V| 午夜一区二区三区视频| 亚洲第一网中文字幕| 日韩欧美在线中字| 国内精品99| 欧美日韩国产免费观看视频| 日韩在线高清| 亚洲成年人影院在线| 日本a级黄色| 在线资源av| 中文字幕亚洲乱码| 午夜国产在线| 日韩一级在线视频| 中文字幕亚洲乱码| 中文字幕日韩国产| 精品日韩av| 欧美日韩精品欧美日韩精品 | 中文字幕精品在线播放| 国产日韩综合| 日韩欧美国产高清| 午夜精品一区二区三区免费视频| 日韩精品丝袜在线| 天天综合色天天| 人成免费在线视频| 最新中文在线视频| 中文字幕精品在线| 日韩字幕在线观看| 欧美日韩高清在线播放| 国产视频一二区| 欧美日韩国产首页在线观看| 中文字幕在线播放一区| 欧美日韩在线精品成人综合网| 欧美日韩国产在线看| 中文天堂在线一区| 亚洲国产综合久久| 日韩欧美一级在线播放| 精品999在线| 日韩久久久精品| 亚洲一区不卡在线| 91精品国产91久久久久久三级| 国产免费久久| 国产黄在线观看免费观看不卡| 免费视频久久| 国产不卡在线观看视频| 日韩精品国产欧美| 欧美国产日韩在线播放| www.91香蕉视频| 日韩中文字幕在线视频观看 | 精品国产91| 日韩在线不卡一区| 婷婷中文字幕一区三区| 国产一卡二卡3卡4卡四卡在线| 久久电影国产免费久久电影| 中文字幕视频在线观看| 国产123在线| 日韩欧美国产高清91| 欧美激情视频一区二区三区在线播放| 日韩精品在线免费看| 欧美一级日韩一级| 亚洲.国产.中文慕字在线| 日韩精品在线网站| 91麻豆视频网站| 日韩国产91| 69堂精品视频在线播放| 91精品高清| 亚洲一级特黄| 国产一区日韩| 精品久久久网| 久久中文精品| 中文字幕亚洲区| 中文网丁香综合网| 中文字幕第一页在线播放| 国产在线高清精品| 久久精品蜜桃| 欧美日韩在线播放一区| 亚洲福利在线看| 国产欧美日韩精品在线| 中文字幕精品在线视频| 91精品国产免费| 国产资源中文字幕| 国产无遮挡在线视频免费观看| 中文字幕国产视频| 欧美日韩午夜在线| 在线观看国产一区| 亚洲热在线观看| 日韩精品资源二区在线| 欧美三级在线视频| 蜜臀国产一区| 午夜一区二区三区视频| 男人的天堂网av| 久久久精品日韩欧美| 久久精品久久精品亚洲人| 欧洲精品二区| 日韩欧美国产午夜精品| 亚洲一区不卡在线| 亚洲福利精品| 国产日韩精品在线观看| 中文亚洲免费| 免费高清特黄a大片| 亚洲精品欧美二区三区中文字幕| 国产在线视频不卡| 亚洲精品中文字幕乱码三区| 九七久久人人| 黄色国产在线| 国产欧美综合视频| 欧美日韩精品国产| 精品在线网站观看| 欧美亚洲天堂网| 亚洲免费在线视频一区 二区| 亚洲国产午夜精品| 欧美日韩性视频| 日韩中文字幕91| 天堂在线一区二区三区| 亚洲欧美999| 色综合天天综合网国产成人综合天| 欧美中文字幕在线观看视频| 日韩欧美高清在线| 日韩在线播放一区二区| 久久99蜜桃精品久久久久小说| 欧美日韩高清在线播放| 中文字幕在线亚洲| 日韩欧美色综合| 91久久视频| 欧美日韩亚洲国内综合网俺| 久久夜色精品国产噜噜亚洲av| 中文字幕久久精品| 日韩精品视频在线观看网址 | 999精品在线| 日韩精品高清不卡| 日韩影院二区| 一区免费在线| 精品久久久久久综合日本欧美 | 国产欧美日韩三级| 久久精品夜夜夜夜久久| 亚洲第一视频在线观看| 亚洲制服一区| 精品播放一区二区| 亚洲娇小xxxx欧美娇小| 久久久精品国产99久久精品芒果| 亚洲第一中文字幕在线观看| 中文字幕欧美日韩va免费视频| 在线欧美日韩国产| 欧美日韩国产中文| 刘玥91精选国产在线观看| 国产69精品久久久久孕妇国产69久久 | 国产传媒久久久| 久99久视频| 国产三级做爰在线观看| 国产高清在线视频| 欧美不卡视频一区| 国产婷婷一区二区| 日韩在线视频中文字幕| 国产在线高潮| 日韩精品视频在线观看网址| 国产一区在线精品| 欧美 日韩 国产 在线| 在线一区二区三区精品| 亚洲女人天堂色在线7777| 国产亚洲欧美中文| 中文字幕精品一区二区三区在线| 国产一卡2卡3卡4卡网站免费| 欧美日韩亚州综合| 久久婷婷中文字幕| 亚洲精品欧美二区三区中文字幕| 亚洲成a人片在线www| 精品视频www| 国产一二三四| 日韩在线视频一区| 精品三级久久| 久久中文免费视频| 午夜精品一区二区三区免费视频| 国产一二三视频| 91精品国产综合久久久久久漫画| 国产在线二区| 久久久久久欧美| 久久久精品日韩欧美| 欧美日韩尤物久久| 国产无遮挡在线视频免费观看| 欧美日韩久久久| 日韩视频精品在线观看| 欧美日韩综合在线观看| 欧美另类久久久品| 国产日韩av一区二区| 首页国产欧美久久| 亚洲3区在线| 亚洲国产福利| 中文字幕4区| 99色在线视频| 欧洲精品二区| 精品欧美日韩| 精品久久在线观看| 国产在线二区| 欧美日韩性视频一区二区三区| 色国产在线视频| 99这里有精品视频| 国产日韩亚洲欧美| 日韩欧美亚洲视频| 国产激情三区| 视频一区二区中文字幕| 欧美va亚洲va日韩∨a综合色| 国产区在线看| 日韩av中文字幕一区| 日韩精品在线免费观看视频| 日韩精品在线私人| 91精品国产91久久久久久不卡| 日韩精品大片| 欧美日韩亚洲国内综合网| 亚洲欧美视频一区二区三区| 久久久久久自在自线| 欧美日韩在线播放三区四区| 国产拍揄自揄精品视频麻豆| 欧美,日韩,国产在线| 免费在线国产| 亚洲欧美日本国产专区一区| 99精品电影| 欧美日韩国产在线观看| 国产乱国产乱老熟300部视频| 在线国产一级| 欧美日韩综合色| 最新中文字幕在线| 亚洲大片免费看| 国产啊啊啊视频在线观看| 丰满少妇一区| 国产日韩亚洲欧美| 欧美日韩色综合| 婷婷中文字幕在线观看| 日韩精品视频在线观看网址 | 国产在线高清精品| 国产亚洲一级| 国产日韩av高清| 日韩精品视频在线观看免费| 精品国产乱码一区二区| 日韩欧美在线字幕| 在线视频三区|