如何为IA32 sys_read调用定义缓冲区

时间:2011-09-24 15:34:37

标签: x86

我在Linux上使用来自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 个答案:

答案 0 :(得分:1)

“BUFFADDR”只是某个内存区域的地址,其大小足以容纳正在读取的数据(在您的情况下为两个字节)。基本上有两个地方可以获取内存:当前堆栈或堆。对于一个小缓冲区,你可以分配堆栈(只是碰撞堆栈指针以保留一些空间),对于堆,请参阅'brk'系统调用。

这里有关于堆栈帧的一些细节(包括你不需要的参数传递的东西):http://www.cs.mun.ca/~rod/winter2004/cs3724/notes/frame.html

如果你想要IO库,那么根据定义,你不需要汇编程序。您正在寻找的IO库是C库。