计算程序的系统调用数,并用strace检查结果的有效性



我使用ptrace来计算程序的系统调用。
问题是给定一个程序a,我的程序打印出所进行的系统调用(打开、关闭、读、写)的数量。

我的程序和strace(带-c选项)以程序A作为参数的结果是相同的,除了打开的系统调用。
我的程序打印15,strace打印3。

但是我猜strace也打印了一些其他的系统调用,这些可能加起来是我的程序统计的15个打开的系统调用。

在查看ORIG_EAX/RAX寄存器时,我使用SYS_open来检查ptrace的结果。

strace打印的系统调用在这里。

更新:
我从终端编译我的程序并在那里运行它,结果和strace是一样的。
我在netbeans开发。

为什么会发生这种情况?

听起来netbeans使用ptrace来控制事情。(毕竟,没有它怎么能执行断点和步骤呢?)所以netbeans可能会向你的程序发送无害的信号。

你可以运行strace -o/tmp/foo(不带-c)来了解到底发生了什么。(比较使用netbeans和不使用netbeans的输出,看看有什么不同。)

如果你想过滤特定的调用,你也可以添加"-e open,close"

最新更新