web-dev-qa-db-ja.com

他のシンボルを削除せずに、特定のELFセクションを削除するにはどうすればよいですか?

試みたにもかかわらず、_.eh_frame_セクションを含むELF32ビットx86ファイルがあります1 それを削除します。

未使用のセクションを含む他のセクションのシンボルに触れずに、_.eh_frame_セクションを削除したいと思います。

stripにはオプション_--remove-only_がないようで、常に他のセクションを変更することになります。

ファイル内の他の部分を変更せずに単一のELFセクションを削除するにはどうすればよいですか?

1その他の質問 で提案されているように、_gcc-3.4.3 -fomit-frame-pointer -fno-exceptions -fno-asynchronous-unwind-tables -fno-unwind-tables_のいくつかのバリエーションを試しましたが、_.eh_frame_セクションは常にあります。これはおそらく、古いGCC(3.4.3)を使用する必要があるという事実によるものです...ソースファイル自体には、次のセクションを必要とする可能性のある特別なものは何も含まれていません:int main() { return 0; }

13
anol

stripは、その名前にもかかわらず、ここでは適切なツールではありません。

考えられる解決策はobjcopy --remove-section .eh_frame a.out、 どこ a.outは、変更するELFファイルの名前です。

残念ながら、objcopyについて知らない限り、stripを使用してソリューションを検索し、何も見つからない可能性があります。

22
anol