当前位置: 首页 > 科技观察

如何拦截并打包一个可执行程序?

时间:2023-03-15 00:26:50 科技观察

本文一共讨论了3种方法来实现[功能]的拦截:编译阶段的instrumentation;连接阶段的检测;执行阶段的检测;昨天有网友又问了一个问题:如何拦截可执行程序?他提出了一个实际的例子:在Ubuntu18.04操作系统中,重启命令/sbin/reboot是一个软链接,它链接到可执行程序/bin/systemctl,那么是否可以在执行systemctl之前做一些其他的事情(比如作为:保留一些应用程序状态数据)?在Ubuntu18.04中,systemd用于管理系统的所有服务;除了reboot命令之外,还有其他几个命令也软链接到/bin/systemctl;这里有个问题:由于上面6条命令都链接到了systemctl,那么systemctl在执行的时候,怎么知道是哪个命令调用的呢?直接看源码:是通过参数argv[0]获取的。我们知道main函数是通过argc和argv[]获取所有参数的,如下://测试文件:test1.c#includeintmain(intargc,char*argv[]){printf("argc=%d\n",argc);对于(inti=0;i