程序调用追踪

ar(Archiver)是 Linux 下创建静态库的标准工具。而 gcc-ar 是它的一个包装器(Wrapper) 。笔者想要知道gcc-ar调用ar的细节,比如参数信息。

1)使用strace

bash 复制代码
strace -s 1024 -f -e execve gcc-ar

2)创建一个"伪造"的 ar

可以在不中断流程的情况下,记录所有gcc-ar的动作,可以玩个"调包计"

第一步,编写一个脚本 my-ar.sh

bash 复制代码
#!/bin/bash
echo "gcc-ar called ar with: $@" >> /tmp/ar_commands.log
# 这个地方需要写程序的绝对路径,如果直接使用ar,有可能陷入死循环,因为这里ar就是这个脚本程序
/devtoolset-8-binutils-2.30-55/bin/ar "$@"

第二步,给执行权限,chmod +x my-ar.sh

第三步,诱骗 gcc-ar : 由于 gcc-ar 往往去 PATH 里找 ar,你可以临时修改环境变量:

bash 复制代码
export PATH=$(pwd):$PATH
ln -s my-ar.sh ar

第四步,查看结果,cat /tmp/ar_commands.log

相关推荐
Molesidy24 分钟前
【GUI】【AWTK】基于开阳平台的GUI界面设计环境搭建
linux·gui·awtk
RisunJan35 分钟前
Linux命令-semanage(SELinux 策略管理)
linux·运维·服务器
流浪00144 分钟前
Linux系统篇 21:文件(五)——动静态库、ELF 底层原理全解
linux·运维·服务器
Dawn-bit1 小时前
Linux救援模式和系统恢复
linux·运维·服务器·云计算·运维开发
十八岁牛爷爷1 小时前
Linux 进程与进程状态・三层级深度解析
linux·运维·服务器
不会就选b1 小时前
linux之进程管理(二)--替换
linux·运维·服务器
倔强的石头1062 小时前
【Linux指南】动静态库系列(二):从源码复用到目标文件复用:为什么需要把 .o 打包成库
linux·运维·服务器
HLC++14 小时前
Linux的进程间通信
android·linux·服务器
华清远见IT开放实验室15 小时前
实验室建设案例 | 石家庄科技信息职业学院嵌入式实验室——从底层硬件到系统应用,一所应用型高校的嵌入式人才培养这样落地
linux·arm开发·stm32·嵌入式硬件·高校·实验室建设