linux下如何查看一个二进制文件是使用-O0优化还是-O2优化?

linux下如何查看一个二进制文件是使用-O0优化还是-O2优化?,第1张

gcc默认提供了5级优化选项:-O/-O0:无优化(默认)-O1:使用能减少目标文件大小以及执行时间并且不会使编译时间明显增加的优化。该模式在编译大型程序的时候会花费更多的时间和内存。在-O1下:编译会尝试减少代码体积和代码运行时间,但是并不执行会花费大量时间的优化 *** 作。-O2: 包含-O1的优化并增加了不需要在目标文件大小和执行速度上进行折衷的优化。GCC执行几乎所有支持的 *** 作但不包括空间和速度之间权衡的优化,编译器不执行循环展开以及函数内联。这是推荐的优化等级,除非你有特殊的需求。-O2会比-O1启用多一些标记。与-O1比较该优化-O2将会花费更多的编译时间当然也会生成性能更好的代码。-Os:专门优化目标文件大小,执行所有的不增加目标文件大小的-O2优化选项。同时-Os还会执行更加优化程序空间的选项。这对于磁盘空间极其紧张或者CPU缓存较小的机器非常有用。但也可能产生些许问题,因此软件树中的大部分ebuild都过滤掉这个等级的优化。使用-Os是不推荐的。-O3: 打开所有-O2的优化选项并且增加 -finline-functions, -funswitch-loops,-fpredictive-commoning, -fgcse-after-reload and -ftree-vectorize优化选项。这是最高最危险的优化等级。用这个选项会延长编译代码的时间,并且在使用gcc4.x的系统里不应全局启用。自从3.x版本以来gcc的行为已经有了极大地改变。在3.x,-O3生成的代码也只是比-O2快一点点而已,而gcc4.x中还未必更快。用-O3来编译所有的软件包将产生更大体积更耗内存的二进制文件,大大增加编译失败的机会或不可预知的程序行为(包括错误)。这样做将得不偿失,记住过犹不及。在gcc 4.x.中使用-O3是不推荐的。————————————————版权声明:本文为CSDN博主「rongming_lu」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/LU_ZHAO/java/article/details/104516291

之前看同事使用JD-GUI来反编译java

.class文件,觉得很爽,不过一直以来也没有再次接触到这个问题,所以也没有对这个工具进行深入的了解。

今天无聊看了些技术文档,忽然想起这个工具来,上网一找。呼呼果真也有Linux的版本。

不过我网上资料显示主页上下载的gz包是32位的程序,我在64位的Fedora

12下可能有些问题,程序在运行时会调用不到关键的32位库而失败。幸运的是只要安装几个包即可:

yum install

libcanberra-gtk2.i686 PackageKit-gtk-module.i686

gtk2-engines.i686

下载后:

tar -xzvf

jd-gui-0.3.2.linux.i686.tar.gz

sudo mv jd-gui

/usr/local/bin

至此jd-gui便可以在linux下运行,对于class或者jar文件都可以使用这个工具打开查看反编译源码

转载,仅供参考。

这个文件格式是Linux或者Unix下常见的命名方式,代表做过那些打包处理,Gz代表用Gzip做过压缩,tar 代表用tar命令做过打包,需要按照文件名后缀反向一层层解包后使用。先解Zip包,再反向解tar包,再看看有没有安装文件或者编译文件 install 或者Make文件等。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8713070.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-20
下一篇2023-04-20

发表评论

登录后才能评论

评论列表(0条)

    保存