2011-09-24 38 views
1

我在Linux上使用來自IA32彙編程序的sys_read系統調用時遇到問題。什麼是定義緩衝區的正確方法?如何爲IA32 sys_read調用定義緩衝區

這是我迄今爲止的相關部分:

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

其中SYS_READ和STDIN開頭的定義。 建立緩衝區的正確位置在哪裏? (BUFFADDR在粘貼的代碼中)。

IA32彙編器是否有任何I/O庫?或者是從Stdin讀取值的最簡單方法? 我找不到一個執行此類操作的工作示例,我希望有人可以提供幫助。

回答

1

「BUFFADDR」只是一個足夠大的內存區域的地址,可以容納正在讀取的數據(因此您的情況下爲兩個字節)。基本上有兩個地方可以獲得內存:當前堆棧或堆。對於一個小緩衝區,你可以從堆棧中分配(只是碰撞堆棧指針來保留一些空間),對於堆,請參閱'brk'系統調用。

下面是關於棧幀的一些細節(包括有關路過,你不需要還的說法東西,雖然):http://www.cs.mun.ca/~rod/winter2004/cs3724/notes/frame.html

如果你想IO庫,然後用漂亮的你不想彙編定義了。您要查找的IO庫是C庫。