我在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读取值的最简单方法? 我无法找到执行此类操作的实际示例,我希望有人可以提供帮助。
答案 0 :(得分:1)
“BUFFADDR”只是某个内存区域的地址,其大小足以容纳正在读取的数据(在您的情况下为两个字节)。基本上有两个地方可以获取内存:当前堆栈或堆。对于一个小缓冲区,你可以分配堆栈(只是碰撞堆栈指针以保留一些空间),对于堆,请参阅'brk'系统调用。
这里有关于堆栈帧的一些细节(包括你不需要的参数传递的东西):http://www.cs.mun.ca/~rod/winter2004/cs3724/notes/frame.html
如果你想要IO库,那么根据定义,你不需要汇编程序。您正在寻找的IO库是C库。