1. 程式人生 > >使用匯編語言實現if else 迴圈 函式呼叫

使用匯編語言實現if else 迴圈 函式呼叫

需要使用匯編來演示如下程式碼 需要下載ollydbg彙編偵錯程式 點選File-Open隨意開啟一個exe檔案 我這裡隨便找到c:/windows/explorer.exe檔案


這裡EIP的值表示下一次執行需要執行的程式碼位置


雙擊 EIP紅色地址 左邊程式碼會自動跳轉到對應的程式碼行  有了以下環節 接下來新增程式碼


如果替換的程式碼 佔用的位元組數 小於原始的程式碼數 會自動補充 nop空指令

一。實現 if else 

MOV EAX,1 表示將1立即數 設定給EAX暫存器

CMP EAX,1 比較EAX的值和1是否相等 Z標誌位(如果減法運算 結果為0 該標誌被置為1 不為0 標誌位被置為0) 這裡EAX=1 Z標誌=1

JE 0101A572 表示有條件跳轉 當Z標誌=1(也就是EAX=1) 自動跳轉到後面指定的0101A572 地址 就會執行 move EBX,1 

JNE 0101A578 表示有條件跳轉 當Z標誌=0(也就是EAX!=1) 自動跳轉到後面指定的0101A578 地址 就會執行 move ECX,1 


如果需要除錯 參考如下圖


二。實現 迴圈

MOV ECX,4 表示將4立即數 設定給ECX暫存器

DEC ECX 將ECX的值 減去1 

TEST ECX,ECX TEST指令是將ECX和ECX進去邏輯與 操作 1001&1001一定是自己1001 只有當ECX等於0時 0&0就是0 這個test指令 會修改Z標誌

位  如果ECX等0  那麼邏輯與 Z標誌位就是1  ECX不等於0  Z標誌位等於0 所以TEST ECX,ECX可以判斷ECX是否為0

JNE 0101A564 表示有條件跳轉 當ECX!=0時 z標誌位=0 跳轉到0101A564這個位置 繼續遞減 一直迴圈到 ECX=0時 此時z標誌位=1 

不執行跳轉迴圈結束 


也可以使用  LOOP 跳轉的位置來進行迴圈 該指令會自動將ECX的值 遞減1 不需要單獨控制ECX遞減 當ECX遞減到0時自動退出迴圈

loop 


二。實現 函式呼叫

這裡需要明白一下函式呼叫的實際過程 是先將 引數壓入棧中 在c語言中 stdcall 先壓入函式右邊的引數  這裡假設有兩個引數10和20

棧的原理是 先入後出  壓入兩個引數後  call指令會自動壓入 函式呼叫完成後 下一個執行指令的位置

PUSH 10 壓入第一個引數

PUSH 20 壓入第二個引數

CALL 0101A56D 呼叫函式 函式的入口地址是0101A56D 可以檢視如下圖片中右下角堆疊的部分 分別壓入了 10,20 以及call後面的一句程式碼的地址

 0101A568 也就是call完成了執行0101A568 這裡的程式碼

call 0101A56D  會自動跳轉到0101A56D  程式碼的位置 這裡取出棧中(ESP指向棧頂 棧頂是call完成後返回的地址) ESP棧頂+4(第二個引數) ESP棧頂+8(第一個引數)

retn 8 表示 函式返回 返回 就會自動跳轉到棧頂指向的地址的程式碼位置0101A568 就會執行 (8這個數 表示自動將堆疊中兩個引數的值出棧 拋棄)

jmp 0101A57A


相關推薦

使用匯語言實現if else 迴圈 函式呼叫

需要使用匯編來演示如下程式碼 需要下載ollydbg彙編偵錯程式 點選File-Open隨意開啟一個exe檔案 我這裡隨便找到c:/windows/explorer.exe檔案 這裡EIP的值表示下一次執行需要執行的程式碼位置 雙擊 EIP紅色地址 左邊程式碼會自動跳轉

(轉)通過語言實現C協程

mov fine ext https context nbsp make oid reat 轉自:http://www.cnblogs.com/sniperHW/archive/2012/06/19/2554574.html 協程的概念就不介紹了,不清楚的同學可以自己goo

語言系列Ⅱ 實現簡單數學運算

其它 緩沖 pre push n! 實現簡單 bsp 堆棧 算術 軟件:emu8086 語言:匯編語言(Assembly) 註意:本文列出了兩種算術運算的代碼,全部代碼為博主獨自一人編寫,會有瑕疵,謹慎使用。 5.計算S=1+2×3+3×4+4×5+···+N(N+1) 5

語言系列Ⅳ 實現發出各種聲音

reg 清單 end wait 註意 代碼段 div all str 軟件:emu8086 語言:匯編語言(Assembly) 註意:本文列出了響鈴,機槍聲音,音樂播放的代碼,第一個代碼為博主獨自一人編寫,所有代碼都會有瑕疵,謹慎使用。 9.響鈴設計 9.1設計要求: 要求

語言王爽 實驗10-3 數值顯示

assume 寄存器 oop 王爽 art 子程序 nds tar sum 1 assume cs:code 2 data segment 3 db 10 dup(0) 4 data ends 5 6 code segment 7 s

王爽《語言》第2版-----2、寄存器

alt 第2版 mark fcm div clas 寄存器 ng- data- 王爽《匯編語言》第2版-----2、寄存器

語言入門:流程控制

存儲 clas lan 實現 不一定 oba 替代 log sub 流程控制:順序,分支,循環 程序計數器PC中存儲當前執行的程序在EM中的位置 匯編裏面,用比較、跳轉實現流程控制. 1.順序:PC+1(不一定加一,看指令長度) 2.分支循環,直接賦給PC值,執行指定地址的

書評第002篇:《語言(第3版)》

pan sso 編寫 isbn llc 人的 track 漏洞挖掘 之前 本書基本信息 作者:王爽(著) 出版社:清華大學出版社 出版時間:2013-9-1 ISBN:9787302333142 版次:3 頁數:337 字數:527000 印刷時間:

語言-判斷素數:找出前100以內的素數

vcd awb 計數 ise stax rsh amr 統計 tco 1. 題目:找出前100以內素數。 2. 要求:將前100以內素數找出並顯示值,要求每行顯示5個素數。 先列出求100以內素數的C++代碼 然後根據C++代碼寫匯編代碼,相對來說比較容易。 1

語言-整型處理,利用堆棧原樣輸出

tsp dsw cto pps asq log pos 結果 jks 要求:輸入任意一個整型數字字符串,並將整型原樣輸出。 這個子程序主要用於格式化排版,比output直接輸出字符串有很大美觀性。 1 ; Example assembly language progr

語言-環境搭建(32位)

沒有 簡單 搭建 整數 光標 使用 當前 取地址 旗艦 一 系統環境   win7 旗艦版 x86_64 二 安裝IDE   RadASM.v2.2.1.9.cao_cong 三 目前在這個版本中遇到的坑   1 這個IDE的光標對中文兼容性不太好, 當調大編輯區的字體,

Win7 VS2015 NASM語言環境配置

coff 系統環境 port detail arc include proc 環境變量 default 參考了以下兩個博客文章 http://blog.csdn.net/x356982611/article/details/51260841 http://www.cnblo

語言debug時環境變量問題

環境變量問題 安裝 win7旗艦版 使用 asm www read 資料 box 今天我在使用匯編語言使用debug這個命令時,打開win+r的cmd,發現輸入debug根本不起作用,在網上找了不下20種解決方法,後來久經調試,環境變量改了一大堆。最終。。。還是木有成功。

Javascript利用與或運算符優先級實現if else條件判斷表達式

與或 等於 規則 alert 判斷表達式 三目運算 返回值 res 兩個 <script type="text/javascript"> /*************************************************************

語言基礎知識

行數 復雜 過程 相關性 cpu 什麽 地址 匯編語言 高速 1.匯編語言的特點:機器相關性,高速度和高速率,編寫和調試的復雜性。 2.指令與數據的關系:指令是你要計算機做什麽,數據是你要計算機做那些。 3.CPU通過總線對存儲器數據的讀寫過程:CPU要想進行數據的讀寫,必

初識語言

nbsp 內存 部分 回首 pytho 可見 解決 和數 易維   這是我第一次接觸匯編語言這一門課程。第一堂課我了解到它是一門非常古董級別的語言。雖然可能在當代java、python等語言盛行的年代它顯得有些笨拙和不實用(win10已經完全摒棄了匯編),但是通過第一章課程

語言 第一章基礎知識

組成 代碼量 智能 計算 idt 用途 高效 實時 例如 計算機語言的進化演變起源於機器語言 機器語言 (1) 是機器指令的集合。機器指令是0和1構成的二進制信息。 (2) 直接面向機器,與機器的硬件操作一一對應。計算機可以直接識別、執行,使用機器語言可以充分發揮計算機的硬

深入理解計算機系統(3.1)------語言和機器語言

找到 生產 有著 shu 符號 ces pc機 高效率 機器語言   《深入理解計算機系統》第三章——程序的機器級表示。作者首先講解了匯編代碼和機器代碼的關系,闡述了匯編承上啟下的作用;接著從機器語言IA32著手,分別講述了如何存儲數據、如何訪問數據

語言基礎教程》第一章

8bit 高速緩存 ebp 解決 匯編 extent log 指令 blog .386 ;386處理器 .model flat,c ;保護模式下運行,可與C連接 .stack 100h ;堆棧大小 .da

2017.10.18 語言語法和DOS功能調用

開始 符號表 表達 數組 註意 一個 spa 偏移地址 其他 4.1 匯編語言中的基本數據 ·標識符 ·常數 ·變量具有三個屬性: (1)段地址(SEG):變量所在段的段地址 (2)偏移地址(OFFSET):變量所在段內的偏移地址 (3)類型(TYPE):每個變量所占據的字