2011-09-24 5 views
1

LinuxのIA32アセンブラプログラムからのsys_readシステムコールの使用に問題があります。バッファを定義する正しい方法は何ですか?IA32のsys_read呼び出しのバッファを定義する方法

これは私がこれまで持っているものの関連する部分である:SYS_READとSTDINが最初に定義されている

movl $(SYS_read), %eax 
    movl $(STDIN), %ebx 
    movl BUFFADDR, %ecx 
    movl 2, %edx 
    int $0x80 
    movl $eax, $ebp // number of read bytes 

。 バッファを設定する正しい場所はどこですか? (貼り付けられたコードのBUFFADDR)。

IA32アセンブラ用のI/Oライブラリはありますか?それとも、Stdinから値を読み取るのが最も簡単な方法ですか? このような操作を実行する実例が見つかりませんでした。誰かが助けてくれることを願っています。

答えて

1

"BUFFADDR"は、読み取るデータを保持するのに十分な大きさのメモリ領域(ちょうど2バイト)です。基本的には、現在のスタックまたはヒープの2つの場所からメモリを取得できます。小さなバッファの場合は、おそらくスタックから割り振ることができます(スタックポインタをあるスペースを確保するためにバンプするだけです)。ヒープの場合は、 'brk'システムコールを参照してください。

ここでは、スタック・フレームに関するいくつかの詳細は、(あなたがが、まだ必要としないことを渡す引数に関するものを含みます)です。http://www.cs.mun.ca/~rod/winter2004/cs3724/notes/frame.html

あなたはIOライブラリをしたい場合は、アセンブラを望んでいない定義することにより、そのほとんど。あなたが探しているIOライブラリはCライブラリです。

関連する問題