通过“劫持”gcc来获取glibc的所有.c文件对应的预处理结果文件

目标:获取glibc所有.c文件对应的预处理结果文件

方法1:修改makefile

glibc的makefile是非常复杂的,难以实现

方法2:劫持gcc

参考了这篇文章:https://blog.csdn.net/weixin_39020940/article/details/85522167
具体做法:
写一个可执行文件命名为gcc,将其放在$PATH下保证在执行gcc命令时是执行这个可执行文件,这就是“劫持”

如下是我写的gcc可执行程序,它的逻辑很简单:

  1. 将gcc的编译选项-c替换为-E
  2. 将-o指定的输出文件名结尾增加一个.i用来存放预处理结果
#!/bin/bash
para="$@"

gcc="/usr/bin/gcc"
cmd="${gcc} ${para}"
cmd=`echo ${cmd}|awk -F" -c " '{print $1," -E ",$2}'`

front_o=`echo ${cmd}|awk -F" -o " '{print $1}'`  #echo将cmd变量中的字符串输出到标准输出流中 通过管道符号将其传递给awk命令进行处理 最后把整体用 ` `括起来为front_o变量赋值
behind_o=`echo ${cmd}|awk -F" -o " '{print $2}'`
o=`echo ${behind_o}|awk '{print$1}'`
cmd="${front_o} -o ${o}.i"
${cmd}

完成以上步骤之后 执行make命令,即可将原本对各个.c文件的编译指令全部替换为生成.c文件对应预处理结果文件的指令

实测方法二无法实现获取全部.c文件的预处理结果的目标,以编译glibc2.27为例会报错:

方法三:-save-temps编译选项

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值