日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

通过分析一个C程序的汇编指令执行过程,理解计算机的工作。

發布時間:2025/3/21 编程问答 12 豆豆
生活随笔 收集整理的這篇文章主要介紹了 通过分析一个C程序的汇编指令执行过程,理解计算机的工作。 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

鄭德倫 原創作品轉載請注明出處 《Linux內核分析》MOOC課程
http://mooc.study.163.com/course/USTC-1000029000
首先創建一個C程序的文件,main.c
將一段C程序代碼使用命令 gcc –S –o main.s main.c -m32編譯成匯編代碼。
我們刪除點開頭的輔助信息來得到匯編代碼。

這樣就可以清晰的看到main.c文件的匯編代碼了。
根據匯編代碼我們來一步一步分析程序在執行過程中堆棧的變化過程。
首先程序從main開始執行,最初的堆棧為空,esp和ebp指向同一個地址:

然后執行18:pushl %ebp, 保存舊的ebp地址,把舊的ebp地址壓入堆棧,此時堆棧情況如下:

執行19: movl %esp, %ebp 將esp的值放入ebp中,執行之后堆棧的狀態如下,此時ebp和esp又指向同一地址

執行20:subl $4, %esp 將esp的值減4,此時堆棧的情況如下:

執行21: movl $8, (%esp), 將立即數8放入esp所指向的地址中。此時堆棧情況如下:

執行22:call f, 將eip(23)壓入棧中,然后跳轉到f:處執行,此時堆棧情況如下:

執行9:pushl %ebp,將老的ebp地址壓入棧中,此時堆棧情況如下:

執行10:movl %esp, %ebp,將esp的地址賦給ebp,此時堆棧情況如下:

執行11: subl $4, %esp, 將esp的值減4,此時堆棧的情況如下:

執行12:movl 8(%ebp), %eax, 將ebp + 8所存放的值,放入eax寄存器中,ebp+8存放的值為8,所以此時eax寄存器存放的值為8. 此時堆棧無變化
執行13:movl %eax, (%esp), 將eax寄存器存放的值,放入esp所執行的地址中。此時堆棧的變化如下:

執行14: call g, 將eip(15)壓入堆棧,并且跳轉到函數g執行,此時堆棧的變化如下:
執行2: pushl %ebp, 將老的ebp壓入堆棧,此時堆棧的變化如下:

執行3: movl %esp, %ebp, 將esp存放的值放入ebp中。此時堆棧的變化如下:

執行4:movl 8(%ebp), %eax, 將ebp + 8所指向的內容放入eax寄存器中,ebp + 8存放的內容為8,所以eax寄存器存放的內容為8,此時堆棧無變化。
執行5: addl $11, %eax, 將eax寄存器的內容與11相加,并且將結果放入eax寄存器中, 此時eax寄存器為19。堆棧無變化
執行6:popl %ebp,將棧頂元素彈出,放入ebp寄存器中,即將old ebp還原。此時堆棧的變化如下:

執行7:ret, 程序將執行15行代碼,此時堆棧變化如下:

執行15: leave 相當于
movl %ebp, %esp
popl %ebp
將ebp寄存器的值放入esp寄存器中,并且彈出棧頂元素,存放到ebp中。此時堆棧變化如下:

執行16:ret ,程序將執行23行代碼,此時堆棧變化如下:

執行23: addl $7, %eax, 將eax寄存器的值加上7,并且將結果放入eax寄存器。
執行此指令前,eax寄存器的值為19(上面已經計算得出),執行之后,eax寄存器變為26,此時堆棧無變化
執行24:leave 相當于:
movl %ebp, %esp
popl %ebp
此時堆棧還原到最初的狀態,如下圖所示:

最后執行25: ret 程序退出。

通過分析前面的C程序的執行過程,可以看出計算機的執行過程,就是CPU讀取一條一條的指令來進行執行,指令寄存器EIP就指向下一條需要執行的指令。
而編譯器將高級語言的代碼編譯成CPU可以理解的二進制代碼。任何復雜的程序,都最終變成一條條簡單的計算機指令堆疊而成。
程序執行過程中一些數據的保存,大都是通過堆棧進行的。堆棧寄存器EBP和ESP共同確定了一個堆棧的棧底和棧頂。
通過本節課程學習,初步了解了一個C程序在指令級的運行方式,理解了程序在執行過程中,堆棧的變化過程。

總結

以上是生活随笔為你收集整理的通过分析一个C程序的汇编指令执行过程,理解计算机的工作。的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲国产传媒 | 欧美性福利 | a资源在线观看 | 国产美女精品一区二区三区 | 中文字幕日韩精品无码内射 | 亚洲8888| 久久免费精品视频 | 成人精品动漫 | 越南a级片 | 成人一级生活片 | 轮番上阵免费观看在线电影 | 伊人av在线播放 | 特级西西人体wwwww | 国产日韩免费 | 欧美123区| 国产亲伦免费视频播放 | 国产aⅴ爽av久久久久成人 | 久久久久国产精品区片区无码 | 国产真实老熟女无套内射 | 人人妻人人爽一区二区三区 | 国产在线xxxx | 国产精品久久久久久久av | 久久久久久久久久国产 | 青青草国产在线播放 | 户外少妇对白啪啪野战 | av日韩在线免费观看 | 成人动漫在线观看免费 | 变态另类一区 | 久久久久网 | 久久第一页 | 亚洲成人一区二区在线观看 | 秋霞影院午夜丰满少妇在线视频 | www.国产成人 | 国产精品久久av无码一区二区 | 97看片网 | 久久爱网 | 天堂一区二区三区 | 免费超碰在线观看 | 91网站免费视频 | 国产真实交换夫妇视频 | 好爽快一点高潮了 | 特级西西444www高清大视频 | 日韩精品av一区二区三区 | 国产热视频| 日出白浆视频 | 乌克兰av在线 | 国产又猛又粗 | 免费看成人毛片 | 人妻少妇偷人精品久久性色 | 娇小6一8小毛片 | 国产片天天弄 | 国产精品秘 | 日韩毛片网站 | 成人做爰9片免费视频 | 亚洲天堂自拍偷拍 | 丰满女邻居的色诱4hd | 东北熟女一区二区三区 | 免费观看黄色网址 | 美女视频黄的免费 | 久久伊人爱 | 五月婷婷一区二区 | 国产又黄又粗又猛又爽视频 | 成品短视频泡芙 | 91网在线播放 | 国精品人妻无码一区二区三区喝尿 | 亚洲综合色视频 | 国产在线观看免费高清 | 伊人成人在线 | 91精品一区二区三 | 日本亚洲欧洲色 | 日本黄色a视频 | 少妇毛片一区二区三区粉嫩av | 日韩免费一区二区三区 | 亚洲精品久久久久av无码 | 爱爱爱爱网站 | 秋霞网一区二区 | 五十路六十路七十路熟婆 | 国产a级免费视频 | 在线观看中文 | 人妻饥渴偷公乱中文字幕 | 国产福利在线观看 | 四虎影裤 | 国产做爰xxxⅹ性视频国 | 国产古装艳史毛片hd | 岛国av大片 | 中文字幕欧美人妻精品一区蜜臀 | 善良的女邻居在线观看 | 成人综合社区 | 福利午夜视频 | 成人做受视频试看60秒 | 国产婷婷色 | 玖玖精品视频 | 精品黑人一区二区三区 | 高清国产在线观看 | 永久免费网站直接看 | 欧美丰满少妇 | 中文字幕一区电影 | 亚洲成人网在线观看 | 欧美成人乱码一区二区三区 |