您的位置:首页 > 其它

unix进程系统调用的追踪

2016-05-25 21:28 295 查看
当你执行未知程序时,就表示你所做的这件事对系统可能造成危险。计算机病毒与蠕虫经常是以此方式散布。

如果程序时脚本,你便能进入一窥究竟。但如果它是像黑盒子一般的二进制影像文件,你就无从得知它的行行为了。

这类程序通常会让用户觉得不安,我们多半不会以root的身份执行它。这时,有一个能追踪系统调用的日志就很有用了,它可以帮助你找出安装程序究竟做了些什么。就算你太晚知道而不乏恢复已删除的或已更改的文件,至少你可以知道哪些文件已受到影响,如果你的文件系统备份或快照还在,便能马上恢复此灾难。

很可能你的系统里就有一个这样的程序,试试下面的命令:ktrace、par、strace、trace或truss。

linux:strace

$strace cat /dev/null
execve("/bin/cat", ["cat", "/dev/null"], [/* 22 vars */]) = 0
brk(0)                                  = 0xab1000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f29379a7000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
...


Solaris:truss

BSD和MAC OS X的ktrace命令有点不太一样,它们是将追踪结果写成二进制文件:ktrace.out,之后再执行kdump将其转换为文字形式

小应用:

有些程序不正常终止时,可能会在文件系统中留下残留数据。这些数据本应该删除,除了浪费空间,还可能在下次执行程序时发生问题。例如daemon、邮件客户端、编辑器、数据库等都会产生锁。如果非正常终止,可能会导致锁文件没被删除,导致第二次启动失败。

下面是在Solaris上,如何找出有特定浏览器所产生的锁定文件:

$truss   -f  -o  foo.log    mozilla

$grep   -i  lock   foo.log

29028:    symlink("192.168.253.187:29028",  "/home/jones/.mozilla/jones/c7rboyyz.slt/lock") = 0

.....

29028:    unlink("/home/jones/.mozilla/jones/c7rboyyz.slt/lock") = 0

不过锁文件不见得总是有lock这个字在其中,所以有时你可能得更仔细审视追踪日子,找出你要的锁文件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: