IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 应用调试之使用strace命令跟踪系统调用 -> 正文阅读

[系统运维]应用调试之使用strace命令跟踪系统调用

一、安装:

1、解压:tar xvf strace-4.5.15.tar.bz2 ?

2、打补丁:cd strace-4.5.15

? ? ? ? ? ? ? ? ? ? ?patch -p1 < ../strace-fix-arm-bad-syscall.patch

---是原来的文件,+++是修改后的文件,+是添加的代码,要加参数把第1个斜杠前的

内容去掉,才能找到要给哪一个文件打补丁。-p1这里的数字1是从补丁文件里面吧第1

个斜杠前的内容去掉,就可以打哪一个文件。


3、配置:./configure --host=arm-linux CC=arm-linux-gcc

//--host=arm-linux表示程序编译出来后在arm上的linux系统上运行
//CC表示编译器

4、编译:make

5、拷贝:将strace文件拷贝到开发板根文件系统的bin目录下


二、实验

?(1)安程序,直接输入strace+回车查看使用


(2)用strace跟踪调用(可以知道应用程序运行过程中调用了哪一些系统调用函数)

把生成的log.text拷贝到PC端分析,这里fd=3,把数值\1\0\0\0写到文件3里面去,写4字节。

这里val值为1,涉及open和write调用


三、原理说明

strace主要用于跟踪系统调用,那么是如何跟踪的呢?我们来分析一下:

首先strace会作为一个父进程,而被跟踪的系统调用作为子进程,我们用open函数来

举个例子:

我们知道在用户空间的open函数,它会调用一个swi指令加上一个值,这个指令会导致

一个异常,然后进入内核态,在这个异常处理函数里面就会根据那个值找到并调用

sys_open这个函数,下面我们就来好好的来看一个这个异常处理函数:

首先在内核里搜索:vector_swi,找到:

ENTRY(vector_swi)

@测试本系统调用是被跟踪,如果被跟踪的话就调用:__sys_trace

tstip, #_TIF_SYSCALL_TRACE @ are we tracing syscalls?

bne__sys_trace
? ? ? ? ? syscall_trace

这个函数用于向父进程,也就是strace发送一个信号,等待strace反应后才会继续往下

执行。

我们来总结一下:

strace作为父进程去调用open函数,open函数会产生一个异常然后进入到内核里面,

在内核里面首先检查该系统调用没有有被跟踪,如果被跟踪的话就会向strace发送一个

信号,并等待回应,strace收到信号之后就可以把相应的信息记录下来并且给出应答,
?
系统调用收到应答之后继续执行!

四、移植:busybox-1.20.0并且使用strace解决问题

1、到官网下载:http://www.busybox.net/downloads/

2、解压:tar xvf busybox-1.20.0.tar.bz2

3、配置:cd busybox-1.20.0

? ? ? ? ? ? ? ? ?make menuconfig

4、配置选项添加交叉编译工具:arm-linux-

Busybox Settings ?--->
? ? ? ? ?Build Options ?--->
Cross ?Compiler prefix(NEW) --->

添加交叉编译工具前缀:arm-linux-

5、编译:make

6、解决错误:

错误1:

miscutils/ionice.c:23: error: `SYS_ioprio_set' undeclared (first use in this function)
解决方法:将ionice选项去掉

(1)make menuconfig

(2)输入"/",进入到搜索框

(3)在搜索框里面输入:ionice,回车

(4)会列出ionice选项的位置

(5)找到ionice选项并去除选中

(6)保存退出,并且执行:make

错误2:

miscutils/nandwrite.c:64: error: dereferencing pointer to incomplete type

解决方法:将nandwrite,nanddump选项去掉

方法同上

错误3:

miscutils/ubi_tools.c:67:26: mtd/ubi-user.h: No such file or directory

解决方法:将ubi开头的选项都去掉

方法同上
现在编译成功了

7、用新编译出来的busybox替换本来根文件系统的busybox

先备份旧的busybox


把新编译的busybox拷贝过来

8、重启开发板,挂载新的根文件系统

查看busybox版本,替换成功


9、我们加载驱动:insmod first_drv.ko

卸载驱动的时候出现错误:

rmmod first_drv

rmmod: chdir(/lib/modules): No such file or directory

解决方法:

(1)strace -o log.txt rmmod first_drv

(2)看log.txt文件的结尾:

chdir("/lib/modules") ? ? ? ? ? ? ? ? ? = -1 ENOENT (No such file or directory)

提示没有/lib/modules

于是我们创建:mkdir /lib/modules

再次卸载:rmmod first_drv

还有错误:rmmod: chdir(2.6.22.6): No such file or directory

解决方法:

(1)strace -o log.txt rmmod first_drv

(2)看log.txt文件的结尾:

chdir("2.6.22.6") ? ? ? ? ? ? ? ? ? ? ? = -1 ENOENT (No such file or directory)

于是我们 创建:mkdir /lib/modules/2.6.22.6

卸载成功!

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-04-26 12:16:02  更:2022-04-26 12:20:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 20:23:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码