2

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

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

但我猜测,由于 strace 还会打印一些其他系统调用,这些可能加起来就是我的程序计算的 15 个打开的系统调用。

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

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

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

为什么会这样?

4

1 回答 1

1

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

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

如果要过滤特定呼叫,还可以添加“-e open,close”。

于 2013-04-15T03:53:22.013 回答