Unixでストリップされ、実行されない実行可能ファイルとは何ですか?


37

manファイルから、

EXAMPLES
   $ file file.c file /dev/{wd0a,hda}
   file.c:   C program text
   file:     ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV),
             dynamically linked (uses shared libs), stripped
   /dev/wd0a: block special (0/0)
   /dev/hda: block special (3/0)
   $ file -s /dev/wd0{b,d}
   /dev/wd0b: data
   /dev/wd0d: x86 boot sector
   $ file -s /dev/hda{,1,2,3,4,5,6,7,8,9,10}
   /dev/hda:   x86 boot sector
   /dev/hda1:  Linux/i386 ext2 filesystem
   /dev/hda2:  x86 boot sector
   /dev/hda3:  x86 boot sector, extended partition table
   /dev/hda4:  Linux/i386 ext2 filesystem
   /dev/hda5:  Linux/i386 swap file
   /dev/hda6:  Linux/i386 swap file
   /dev/hda7:  Linux/i386 swap file
   /dev/hda8:  Linux/i386 swap file
   /dev/hda9:  empty
   /dev/hda10: empty

   $ file -i file.c file /dev/{wd0a,hda}
   file.c:      text/x-c
   file:        application/x-executable, dynamically linked (uses shared libs),
   not stripped
   /dev/hda:    application/x-not-regular-file
   /dev/wd0a:   application/x-not-regular-file

実行可能ストリッピングとはどういう意味ですか?

なぜ実行可能ファイルの一部が削除され、他の実行可能ファイルは削除されないのですか?

回答:


50

gccの-gフラグを使用して実行可能ファイルをコンパイルすると、デバッグ情報が含まれます。つまり、各命令には、ソースコードのどの行がそれを生成したか、ソースコード内の変数の名前は保持され、実行時などに一致するメモリに関連付けることができるという情報があります。実行可能ファイルのサイズを小さくするために実行に必要のない実行可能ファイル。


10
strip(1)マンページも参照してください。通常、stripはすべてのシンボルを削除します。これらは厳密に必要ではないためです。デバッグ情報も削除されますが、シンボルが
重要

3
この概念は、ほとんどの実行可能形式に一般化されていますが、これはgccやunixに固有のものではありません。
ジル「SO-悪であるのをやめる」

4
40MBの実行可能ファイルがあり、それを削除すると6MBに削減されました。これは、デバッグデータが占めるスペースの種類を把握するためです。
ネイサンオスマン

したがって、prog.eビルドされた実行可能ファイルを削除するgcc -g -o prog.e prog.cと、コンパイルするのと同等の結果が得られますgcc -O0 -o prog.e prog.cか?
ysap

1
@ysapいいえ、最適化(-O)とは関係ありません。アセンブリコードは、ファイルが削除されるかどうかにかかわらず同じままです。デバッグ情報なしで実行可能ファイルを取得します(したがって、「-g」が失われても問題ありません)。また、すべてのシンボル(関数名、グローバル変数名など)がありません。「gcc -s -o prog.e prog.c」と同等です。プログラムが実行されるとき、シンボルは違いを生じません。しかし、たとえば、プロプライエタリなソフトウェアでは常にシンボルが削除されます。そうしないと、誰もが関数の元の名前とその場所を知ることができるからです。
ピクラス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.