3

まさにここで私が焦点を当てているのは...

mmap(0x37aa74d000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x14d000) = 0x37aa74d000

strace は使用されたすべての syscall を返すとすべての人が言っていますが、私grep entry.Sとそこにあるのsys_mmapは単にmmap,つまりmmap、syscall ではないということだけではありませんsys_mmap

では、 strace は正確には何を出力しているのでしょうか??

別の質問は、戻り値を意味すると思います= 0x37aa74d000よね?しかし、関数に戻り値の型がない場合はどうなりますか?( void)?

4

4 に答える 4

3

straceユーザースペースの観点からシステムコールの名前を生成します:so mmap、、、、など。これはopen、libcラッパーがOSにトラップするよりも複雑なことを行うときにコーディングされた関数呼び出しとは異なります。たとえば、コードを呼び出すと、への呼び出しが表示されます。これは、長年にわたってシグナルアクションを設定するための最も一般的なシステムコールであり、GNUlibcはその観点からすべてのシグナル設定関数を実装しているためです。原生的。(この場合、glibcはラッパーを公開していないため、直接呼び出すことができない場合があります。その理由はわかりません。)readwritesigactionstracert_sigactionrt_sigactionrt_sigaction

sys_mmapは、システムコールのエントリポイントとなるLinuxカーネル内の関数の名前です。mmapLinusは、システムコールのエントリポイントに必要な命名規則(、、、、など)を選択できましたmmap。これはmach_mmapZwMmapユーザースペースに関係のない、実装の詳細です。したがってstrace、それらの名前は表示されません。

リターンタイプがである唯一のシステムコールvoidは、などのプロセスを終了するものですexit_group(プログラミング言語設計の観点からは、戻り値がないため、戻り値タイプ がないと言った方が正確です。)strace次のように出力します。

exit_group(0)                           = ?

他のすべてのシステムコールは何かを返します。なぜなら、それらはすべて、少なくとも理論的には失敗する可能性があり、失敗したかどうかを通知する必要があるからです。成功/失敗の表示以外に返す値がない場合は、成功または失敗のint場合はゼロを返し、その逐語的に出力します。[Soapbox:これはUnixでの長年の設計エラーであり、少なくともNFSの最初の実装までさかのぼります。リソースの割り当て解除プリミティブ(、、など)が失敗することは不可能であり、それらの戻りタイプはそれを示す必要があります。タイムマシンを手に入れたらすぐに修正するつもりです。]-1straceclosemunmapvoid

于 2011-06-06T02:56:46.813 に答える
2

mmap(2) は、システム コールの libc ラッパーsys_mmapです。ltraceライブラリ呼び出しを分析する場合に使用します。

mmapの戻り値の型はvoid*、型指定されていないポインターであり、マッピングが成功したときに返されるものです。

于 2011-04-01T06:08:45.393 に答える
0

Strace は syscall を出力していますが、システム コールmmapがありません。確認してくださいman mmap:

ファイルまたはデバイスをメモリにマップまたはマップ解除する

その定義は次のとおりです。

void *mmap(void *addr, size_t lengthint " prot ", int " flags , int fd, off_t offset);int munmap(void *addr, size_t length);

最後の数字は戻り値です。

成功mmap()すると、マップされた領域へのポインターを返します。エラーの場合、値MAP_FAILED(つまり(void *) -1) が返され、errno が適切に設定されます。成功するとmunmap()0 を返し、失敗すると -1 を返し、errno が設定されます (おそらくEINVAL)。

各システムコールについて、ページを確認できmanます。strace出力自体の詳細については、 を確認してくださいman strace

于 2016-04-11T20:25:44.773 に答える