【逆向】匯編基礎指令-例子call調用


寄存器:

 

主要記住以下幾個

Eax:一般用來存放call返回值   模塊命令 系統命令 api

call() :函數,參數,返回 -》 eax

Ecx : 隱藏的對象基址

EBp: 表示參數或變量

    參數   [ebp+0*4(n+1)]     n代表第幾個參數

    變量   [ebp+0*4*n]         n代表第幾個變量

 

eip: 程序下一步要執行的地址

esp:堆棧

ebx

esi

edi

 

 

[local.n]:

   [local.1] 第一個變量 ,[local.2]第二個變量,以此類推

 

mov:

   mov eax,123   將值123 賦值給eax

   mov ebx,13     將值13 賦值給ebx

 

push:

  入棧,相當於傳參

 

 


例子1:

定義一個方法,里面帶有一個變量c

現在需要   數字  123 + 456  的和   賦值給變量c 

可以這么寫

mov eax,123

mov ebx,456

add eax,ebx

mov [local.1],eax

 

[local.1]代表的是這個子程序的第一個變量,這里是簡便寫法,還可以用[ebp+0*4]來表示  

 


例子2,調用call

定義一個無參方法,會輸出語句:“hello”

現在要從其他地方 用匯編調用 ,可以這么寫

 

先定義一個變量,指向call的地址,然后

call eax    就能直接調用

或者 call [local.1]

 

有參方法調用

定義一個有參方法,需要傳入兩個參數,都是int類型,一個a,一個b

會輸出 a+b的值

 

現在要調用,可以這么寫:

先定義一個變量,指向call的地址,然后

push 1

puth 2

call eax   或者  call [local.1]

call的值可以用  mov eax來接收,如  mov [local.1],eax  表示把call的結果傳給第一個變量

 

說明:push的順序是反過來的

例如 參數1要傳入1,參數2要傳入5

那么push 順序是:

    push 5

    push 1

 

 


 

有時候我們是調用別人的call 可能會出現問題

正常調用call后需要我們進行堆棧平衡,

add esp,0*4(n):外平衡

     如果call只有一個參數那么就是  add esp,0*4

    如果call有兩個參數 那么就是   add esp,0*8

     三個參數就是 add esp,0*c【這里為什么是0*c 自己去計算器10進制轉換成16進制就知道了】

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM