簡體   English   中英

每個.so文件都有PLT / GOT嗎?

[英]Does every .so file have a PLT/GOT?

我已經考慮了一段時間,因為我發現甚至像libc這樣的基本庫也具有GOT / PLT,它由諸如malloc()及其朋友之類的重要功能組成。

甚至可以創建一個沒有GOT / PLT的共享庫? 這樣的圖書館會不會在學術活動之外野外出現? (如果有幫助,請專門考慮使用x86平台)

我的直覺告訴我,這些問題的答案分別是“否”和“是”,但我都不確定100%。

僅包含C類型列表的.so文件是否可能沒有GOT / PLT? 也許可以,但是我無法理解為什么實際上只要#include .h文件就能做到這一點!

我最終找到了問題第二部分的答案,似乎是“否”。 我的/ lib目錄中只有不到5500個.so文件,並且運行了以下shell腳本,稱為sotest.sh

#!/bin/bash
for i in $( ls /lib ); do
  objdump -d -j .plt /lib/$i &> /tmp/tmpfile.txt;
  a=`grep "File format not recognized" /tmp/tmpfile.txt`
  b=`grep "not an ordinary file" /tmp/tmpfile.txt`
  c=`grep "not found in any input file" /tmp/tmpfile.txt`
  if [ -n "$a" ]; then
    echo "Invalid";
  elif [ -n "$b" ]; then
    echo "Invalid";
  elif [ -n "$c" ]; then
    echo "$i HAS NO PLT SECTION";
  else
    echo "$i has plt section";
  fi
  rm /tmp/tmpfile.txt;
done
echo "Done"

然后,我運行了./sotest.sh | grep "HAS NO PLT SECTION" ./sotest.sh | grep "HAS NO PLT SECTION" 我確實得到了一些結果,但是全部是.a文件,而沒有一個是.so文件。

因此,在實踐中,似乎沒有PLT / GOT的情況下您永遠不會在.so文件中運行。 我仍然對理論上是否可行感到好奇,但是我找到了問題實際問題的答案,所以我認為它可以幫助其他想知道同一件事的人!

暫無
暫無

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

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