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

时间:2013-04-07 22:07:52

标签: c linux system-calls strace ptrace

我正在使用ptrace来计算程序的系统调用 问题是,给定一个程序A,我的程序打印出系统调用的数量(打开,关闭,读取,写入)。

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

但我猜测,当strace打印其他一些系统调用时,这些可能总结为我的程序计算的15个开放系统调用。

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

strace打印的系统调用是here.

更新
我从终端编译我的程序并从那里运行它,结果与strace相同。
我正在开发netbeans。

为什么会这样?

1 个答案:

答案 0 :(得分:1)

听起来netbeans正在使用ptrace来控制事物。 (毕竟,没有它,它怎么能做断点和步骤?)因此netbeans可能会向你的程序发送无害的信号。

你可以运行strace -o / tmp / foo(不带-c)来确切知道发生了什么。 (比较netbeans和netbeans下的输出,看看有什么不同。)

如果您想过滤特定的来电,也可以添加“-e open,close”。