6

GCC リンカによって生成された ELF ファイルでは、ELF ファイルの先頭は常に実行可能コードのバージョン識別子です。

これは、version.c ファイルを作成し、結果のオブジェクト ファイルを link コマンドの最初のリンク可能なオブジェクトにすることによって実現されます。

ただし、1 つの実行可能ファイルではこれが機能せず、唯一の違いは、実行可能ファイルに C と C++ のコードが混在しており、バージョン シンボルが別の場所に移動されていることです。

問題は、リンカ コマンドまたはコード属性ディレクティブを介してシンボルが常にファイルの先頭に配置されるように、ELF ファイル内のシンボルの絶対位置を保証する方法があるかということです。

4

2 に答える 2

0

ELF ファイルの先頭では、 ELF 仕様に従って、マジック シグネチャ 0x7f、「E」、「L」、「F」である必要があります。コードのバージョンを実行可能ファイルの先頭に置く代わりに、Elf ヘッダーの意味のないフィールドをいくつか使用できると思います (たとえば、ei_pad)。

struct E_Ident {
  unsigned long ei_magic;       
  unsigned char ei_class;        
  unsigned char ei_data;        
  unsigned char ei_version;      
  unsigned char ei_pad[9];       
};
于 2013-10-22T12:03:56.703 に答える