簡體   English   中英

逆向工程懷疑

[英]reverse engineering doubt

8048563:       e8 0d 00 00 00          call   8048575 <exit@plt+0x141>

我試圖對二進制進行逆向工程以求有趣,然后在objdump輸出中看到了此調用。 看這行,我認為調用將是動態鏈接的退出函數。 但是, 8048575似乎是該程序.text部分中的地址!

  1. 為什么會出現這種錯誤的功能命名?
  2. 呼叫到達的地方有以下行; 為什么缺少功能序言?
8048575:       83 ec 6c                sub    esp,0x6c

當程序調用共享庫中的函數時,它將調用過程鏈接表(PLT)中的地址。 最初,PLT包含一個對動態鏈接器的調用,該調用將動態查找功能地址,然后將PLT中的地址替換為其找到的地址。

這就是對IAT(導入地址表)條目的調用,以便它可以對稱為“ exit”的函數執行模塊間調用(實際上是跳轉),這可以避免遠端調用,並使動態鏈接更簡單。 至於“丟失”的序言,根本就不需要建立堆棧框架,事實上大多數功能完全不需要它,因此堆棧分配就是該序言,真正需要堆棧框架的唯一功能是“不信任”的匯編函數或對堆棧進行不可預測的更改的函數。

這實際上不是IAT / PLT調用,而是對同一文件中另一個函數的調用。 該文件可能已刪除其內部符號,並且objdump將所有地址顯示為地址+偏移量之前的最后定義的符號。 沒有內部符號,這將命中最后一個與plt鏈接的函數,因為plt部分位於文本之前。

因此,顯示的名稱只是虛假的,可以忽略。

分配堆棧空間函數的序言,不是嗎? 您怎么知道這不是exit功能的開始? .text很好,因為這是代碼所在的地方。 (請僅參考“程序列表表”。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM