賀邦 原創做品轉載請註明出處 《Linux內核分析》MOOC課程 http://mooc.study.163.com/course/USTC-1000029000#/infospa
知識準備3d
馮諾依曼體系結構指針
核心思想blog
1.馮諾依曼是:數字計算機的數制採用二進制;計算機應該按照程序順序執行。ip
2.採用二進制做爲計算機數值計算的基礎,以0、1表明數值。不採用人類經常使用的十進制計數方法,二進制使得計算機容易實現數值的計算。內存
3.程序或指令的順序執行,即預先編好程序,而後交給計算機按照程序中預先定義好的順序進行數值計算。ci
彙編語言的五種尋址模式get
· 寄存器尋址 registermode: %寄存器 例如:%edx 訪問寄存器edxit
· 當即尋址 immediate: $數字 例如:$0x123 數值0x123io
· 直接尋址 direct:數字 例如:0x123訪問地址0x123指向的內存
· 間接尋址 indirect: (%寄存器) (%ebx) 例如:訪問寄存器ebx中的地址指向的內存
· 變址尋址 displaced:偏移量(%寄存器) 4(%ebx):訪問寄存器ebx中的地址再加4指向的內存;
幾個重要的彙編指令
Example instruction |
What it does |
Pushl %eax |
Subl $4, %esp //棧頂指針減4,棧在向下生長一個位置 Movl %eax, (%esp) //將eax中的值放入棧頂指針指向的內存位置 |
Popl %eax |
Movl (%esp), %eax //從棧頂指針指向的內存中的值放入eax中 Addl $4, %esp //棧頂指針加4,棧在向上收縮 |
Call 0x12345 |
Pushl %eip //ip壓棧 Movl $0x12345, %eip //將0x12345放入eip中 |
Ret |
Popl %eip //ip出棧 |
反彙編實驗截圖
一、源代碼 main.c結果應該爲,10
二、執行完反彙編命令後刪除多餘項的代碼。
3.手繪分析過程。
總結
看似簡單的代碼背後,其實隱藏着計算機複雜的運算,不容小覷。PS.互批時請手下留情,若有不懂請諮詢wechat : hlqhlqhb