Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何彻底剥离可执行文件_Linux_Gcc_Executable_Elf_Strip - Fatal编程技术网

Linux 如何彻底剥离可执行文件

Linux 如何彻底剥离可执行文件,linux,gcc,executable,elf,strip,Linux,Gcc,Executable,Elf,Strip,我想尽可能多地脱衣——在Linux上:一个精灵。我只想把我需要的东西放在里面 我尝试使用条带: strip --strip-all elf 但是它似乎做得不好:nm仍然显示很多东西,二进制文件仍然很大 我该怎么办?使用-R选项剥离,您可以剥离所有不需要的部分。还可以查看有关最小ELF可执行文件的信息。如果其他所有操作都失败,您可以阅读文档,从man strip开始 说真的,也许你的应用程序有很多符号和代码。在一个极端情况下,最大的大小缩减是rm elf,但这样您的程序就不会再运行了。这一切都取

我想尽可能多地脱衣——在Linux上:一个精灵。我只想把我需要的东西放在里面

我尝试使用
条带

strip --strip-all elf
但是它似乎做得不好:
nm
仍然显示很多东西,二进制文件仍然很大


我该怎么办?

使用-R选项剥离,您可以剥离所有不需要的部分。还可以查看有关最小ELF可执行文件的信息。

如果其他所有操作都失败,您可以阅读文档,从
man strip
开始

说真的,也许你的应用程序有很多符号和代码。在一个极端情况下,最大的大小缩减是
rm elf
,但这样您的程序就不会再运行了。这一切都取决于你的程序和你的代码

作为一个具体的例子,我最近使用了一个大型C++库,其中代码“>Load <代码>没有进一步的参数将大小从400 +MB缩小到大约28 MB。但是,您不能再与它进行链接(在其他共享库的上下文中),这使得它有些无用

但是当使用
strip——strip不需要时,它将大小从400+mb更改为55 mb,这仍然相当可观,但允许从其他共享库访问库

简而言之,我相信
strip
。如果不更改代码,您的应用程序可能无法进一步缩减

strip -R .comment
gcc -Os elf.c

这两种方法可能会有所帮助。

我会阅读这篇伟大的文章,深入探讨如何使ELF可执行文件尽可能小。也许它有一些信息可以帮助你


您最初是如何构建它的?我意识到这个问题很久以前就被问到了。我假设您已经将其构建为一个动态链接的二进制文件。如果您创建一个静态链接的ELF文件,然后将其剥离,您可能会得到更满意的结果。@peoro来自Ignacio的注释是相关的。将
-s
添加到gcc将清空符号表。