2012-03-20 4 views
1

私はすでに次のように投稿しました。Questionは解決策を得て前進します
私はptraceを使用して、 。
プログラムはebx、ecx、edxの値を取得しています。 EBX:ECX bf9748af:00008000 EDX:00000000 /オープン
SYSCALL 5:EBX:80485b3 ECX:00000242 EDX:000001b6 /オープンPtraceを使用して、システムコールの引数が何を意味するのかを確認します。

今オープンシステムコールのために私はfoll

SYSCALL 5を得ました、O_TRUNC |

オープン( "test.txtの"、O_RDONLY | O_LARGEFILE)= 3
オープン( "test.txtの"、O_RDWR | O_CREAT:

私はstraceのを使用し、それが魔法のように上記の本などを変換し、 0666)= 3

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

+0

私は 'man 2 open'を読んで、openはビット単位ORであることを知っていましたが、まだ完全な画像が得られませんでした:( –

+0

何をやろうとしていますか? – UmNyobe

+0

@UmNyobe: O_RDWR | O_CREAT | O_TRUNC' –

答えて

1

あなたはthis header fileからそれらの値を読み出すことができます。

#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 

をしかし、それを行うためのポータブルな方法は、それらの値のためのマクロを使用することです。

+0

Ok。また、ビット単位やマニュアルページの意味を明確にすることができますか? –

+0

私は私のprobへの答えを考え出しました。それを明確にすることができれば、私の理解にもっと役立ちます:D –

1

O_LARGEFILEは(fcntl.hで)は、Linux x86用(0x8000に等しい)の実装固有のものであり、

0100000としてLSB(Linuxの標準ベース)で定義され

参照LSB参照:

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

O_RDONLY値が0,O_RDONLY | O_LARGEFILEの場合は0x8000

+0

ありがとう、私はそれを得た。申し訳ありませんが、私の目の前に答えがありました。私が理解するために時間をかけました。本当に悲しいです:( –

関連する問題