Linux下软件编译常见问题指南(为什么某个源代码文件没有生成目标文件)

本文原载于我的博客 http://www.hupeiwei.com


进行安全研究时,可能发现代码中的vuln.c文件存在漏洞;可在对程序编译后,却没有发现它的目标文件(如 vuln.o),影响下一步探索,这是为什么呢?

在多数情况下,这是因为目标代码是程序中的插件,或者说一个模块。比如,一个程序的数据库存储可能支持sqlite、mysql,但是默认是使用mysql,那么和sqlite相关的代码可能就不被编译,这就造成了没有生成目标文件的问题。

该如何使得目标代码被编译呢?Linux常见的程序编译方式有两种,一是autogen.sh->configure->make;还有一种是cmake->make。

对于第一种,可以试一试./configure --help的输出。还是以数据库举例,输出中可能会告诉你–with-sqlite可以指定使用sqlite,那么执行./configure时加上该选项就可以在新生成的Makefile中添加对sqlite相关代码的编译。

对于第二种,往往在CMakeLists.txt中会有选择的地方。可以根据目标代码的关键字进行搜索,将OFF改为ON来启动相应模块。

CMakeLists.txt中设置示例
上面所述的方法是比较规范、易解决的,有的程序不提供相关选项,而是根据判断某个包存不存在来自动选择是否编译某模块。

某子文件夹中的CMakeLists.txt
在上图中,想要mp3tunes被编译,需要满足几个条件。这些条件检查某些包是不是存在、是不是有某些选项。简单粗暴的方法是将那些if直接注释掉,当然也可以研究研究怎么满足这些条件,而不是修改它。

如果上面的方法还是不能获得目标文件,可以去到目标代码所在的子文件夹,若有Makefile,尝试直接make编译该子模块。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值