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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

反汇编RETN 0x0c的理解

發(fā)布時間:2024/4/11 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 反汇编RETN 0x0c的理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.CALL指令:
  CALL指令可不是如喚指令,而是子程序調用指令。那么匯編語言中的子程序是什么呢?子程序能被其它程序調用,在實現某種功能后能自動返回到調用程序去的程序。其最后一條指令一定是返回指令,故能保證得新返回到調用它的程序中去。也可調用其它子程序,甚至可自身調用。
  我們可以暫時把子程序理解為一個代碼段,是一個模塊化的代碼面。這個代碼段可以完成某一特定功能,當程序在執(zhí)行過程中需要用到這一功能,將會進入這個代碼段。這塊代碼段執(zhí)行完畢后,會跳出這塊代碼段。而進入代碼段這一過程就是子程序的調用,也就是這里所說的CALL指令所要完成的工作。
  反匯編經常看到的CALL指令的基本格式如下:
  CALL?? 地址1
  功能:調用地址1處的子程序
  CALL指令分為兩種情況,一種是段內轉移;另一種是段間轉移。這兩種情況類似于JMP指令的相對跳轉和絕對跳轉(只不過相對跳轉的JMP指令會有short標識)。
  在CALL指令進行的是段內轉移的情況時,跟在CALL后面的地址1為一個相對位移;而CALL指令進行的是段間轉移的情況時,跟在CALL后面的地址1為一個絕對內存地址。
  (1) 段內轉移 的CALL指令等價于兩條指令:
  push eip
  jmp?? 目的位置

  也就是說,執(zhí)行段內轉移的CALL指令時,相當于先后執(zhí)行以上兩條指令。
  (2) 段間轉移 的CALL指令等價于三條指令:
  push CS
  push eip
  jmp?? 目的位置

2.RETN/RETF指令:
  按照前面講CALL指令舉的那個例子,CALL指令是進入子程序的指令,而例子中所說的跳出子程序這一過程也需要2條指令,它們是RETN/RETF。
  RETN/RETF是跳出子程序的指令,被稱為返回指令。RETN指令用于從段內轉移CALL進的子程序中返回;RETF指令用于從段間轉移CALL進的子程序中返回。
  RETN/RETF在反匯編代碼中呈現的形式如下:
  RETN
  RETN?? 操作數1
  RETF
  RETF?? 操作數1
   RETN等價于一條指令:POP?? eip
   RETF等價于兩條指令:
  POP?? eip
  POP?? CS

  而帶有操作數的RETN/RETF指令則是在POP之后,執(zhí)行ESP=ESP+操作數1。

==============================================================================================

call編輯

這個命令是訪問子程序的一個匯編基本指令。也許你說,這個我早就知道了!別急請繼續(xù)看完。 call真正的意義是什么呢?我們可以這樣來理解:1.向堆棧中壓入下一行程序的地址;2.JMP到call的子程序地址處。例如: 00401029 . E8 DA240A00 call 004A3508 0040102E . 5A pop edx 在執(zhí)行了00401029以后,程序會將0040102E壓入堆棧,然后JMP到004A3508地址處!

RET編輯

與call對應的就是RET了。對于RET我們可以這樣來理解:1.將當前的ESP中指向的地址出棧;2.JMP到這個地址。

堆棧平衡原理編輯

如果要返回父程序,則當我們在堆棧中進行堆棧的操作的時候,一定要保證在RET這條指令之前,ESP指向的是我們壓入棧中的地址。

總結

以上是生活随笔為你收集整理的反汇编RETN 0x0c的理解的全部內容,希望文章能夠幫你解決所遇到的問題。

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