Linux,プログラムが発行したシステムコールを確認する

スポンサーリンク

鍛錬 780

Linux,プログラムが発行したシステムコールを確認する

プログラムを実行した際に、プログラム(プロセス)が発行したシステムコールについての情報を確認するには、strace を使用します。
 
使用方法は、以下に示す通りです。

発行されたシステムコールについての情報を表示する

strace 実行するプログラムのパス

 
結果をファイルに出力する

strace -o ファイル名 実行するプログラムのパス

 
発行された各システムコールの回数などを取得する

strace -c 実行するプログラムのパス

オプション

以下は、上記のオプションについてです。

オプション 機能
-o 結果を出力するファイル名を指定する
-c 発行された各システムコールの回数などを取得する
スポンサーリンク

プログラム

以下は、今回実行するプログラム、test_strace.c です。

今回はC言語で作成しています。

// include
#include <stdio.h>

// main
int main(void)
{
	printf("Hello\n");
	
	return 0;
}
スポンサーリンク

実行結果

以下は、strace を使用して、プロセスが発行したシステムコールについて確認しています。

発行したシステムコールを確認

以下は、プログラム test_strace.c を実行して、プログラムが発行したシステムコールを確認しています。

***@ubuntu:~/***/test/c$ 
***@ubuntu:~/***/test/c$ strace -o test_strace.txt ./test_strace
Hello
***@ubuntu:~/***/test/c$ 
***@ubuntu:~/***/test/c$ 
***@ubuntu:~/***/test/c$ cat test_strace.txt
execve("./test_strace", ["./test_strace"], 0x7ffc1fa18240 /* 67 vars */) = 0
brk(NULL)                               = 0x560ec09e3000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3


   (中略)


brk(NULL)                               = 0x560ec09e3000
brk(0x560ec0a04000)                     = 0x560ec0a04000
write(1, "Hello\n", 6)                  = 6
exit_group(0)                           = ?
+++ exited with 0 +++

 
上記に示した通り、プログラムが発行したシステムコールを確認することができました。

システムコール「write」を使用して、標準出力に文字列を出力していることなどが分かります。

各システムコールの回数などを確認

以下は、発行された各システムコールの回数などを確認しています。

***@ubuntu:~/***/test/c$ 
***@ubuntu:~/***/test/c$ strace -c -o test_strace.txt ./test_strace
Hello
***@ubuntu:~/***/test/c$ 
***@ubuntu:~/***/test/c$ 
***@ubuntu:~/***/test/c$ cat test_strace.txt
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
  0.00    0.000000           0         1           read
  0.00    0.000000           0         1           write
  0.00    0.000000           0         2           close
  0.00    0.000000           0         3           fstat
  0.00    0.000000           0         5           mmap
  0.00    0.000000           0         4           mprotect
  0.00    0.000000           0         1           munmap
  0.00    0.000000           0         3           brk
  0.00    0.000000           0         3         3 access
  0.00    0.000000           0         1           execve
  0.00    0.000000           0         1           arch_prctl
  0.00    0.000000           0         2           openat
------ ----------- ----------- --------- --------- ----------------
100.00    0.000000                    27         3 total

 
上記に示した通り、プログラムが発行した各システムコールの回数などを確認することができました。

タイトルとURLをコピーしました