1

私はすでに次の質問を投稿して解決策を得て、前進
するためにptraceを使用して、システムコールに渡されるすべての引数を見つけています。
プログラムは、ebx、ecx、edxの値を取得しています。今、オープンシステムコールのために私は次のようになりました

SYSCALL 5:ebx:bf9748af ecx:00008000 edx:00000000 / open
SYSCALL 5:ebx:80485b3 ecx:00000242 edx:000001b6 / open

私はstraceを使用しましたが、上記のように魔法のように変換されます。

open( "test.txt"、O_RDONLY | O_LARGEFILE)= 3
open( "test.txt"、O_RDWR | O_CREAT | O_TRUNC、0666)= 3

これを手動で行うにはどうすればよいですか?O_LARGEFILEの値を見つけることができる場所はありますか?
たくさん検索してこれに出くわしました、すべてが揃っているわけではありません。また、straceコードを読み取ろうとしましたが、この変換のコードは見つかりませんでした。
誰かが私を助けてくれるなら、それは私にとって非常に役に立ちます。また、これがstraceのどこに書かれているのかを知っているなら、私はそれを覗き見したいと思います。前もって感謝します。

4

2 に答える 2

1

O_LARGEFILEは実装固有であり、LSB(Linux Standard Base)で次のように定義されています。

0100000(に等しい0x8000)Linux x86の場合(in fcntl.h

LSBリファレンスを参照してください。

http://linuxbase.org/navigator/browse/constant.php?cmd=list-by-name&Cname=O_LARGEFILE

O_RDONLYの値は0O_RDONLY | O_LARGEFILEに等しくなり0x8000ます。

于 2012-03-20T07:25:51.363 に答える
1

このヘッダー ファイルからこれらの値を読み取ることができます。

#define O_ACCMODE      0003
#define O_RDONLY         00
#define O_WRONLY         01
#define O_RDWR           02
#define O_CREAT        0100 /* not fcntl */
#define O_EXCL         0200 /* not fcntl */
#define O_NOCTTY       0400 /* not fcntl */
#define O_TRUNC       01000 /* not fcntl */
#define O_APPEND      02000
#define O_NONBLOCK    04000
#define O_NDELAY    O_NONBLOCK
#define O_SYNC       010000
#define O_FSYNC      O_SYNC
#define O_ASYNC      020000

しかし、移植可能な方法は、これらの値にマクロを使用することです。

于 2012-03-20T07:28:21.457 に答える