從C簡單程序的彙編代碼入手,以理解計算機工做原理。

賀邦  原創做品轉載請註明出處 《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

相關文章
相關標籤/搜索