我正在学习使用AT& T语法的汇编语言,我想从终端读取一些字符串,以便稍后使用它。 因此我想使用systemcall read,但我不知道之后存储字符串的位置。有谁能告诉我如何找到字符串?
答案 0 :(得分:1)
它存储在the 2nd arg you passed to read(2)
指向的缓冲区中。
正如Margaret Bloom评论的那样,x86-64 Linux传递了syscall
中的第二个rsi
arg,而i386 Linux传递了int 0x80
中的第二个ecx
arg。有关更多详细信息,请参阅x86标记wiki有关系统调用/ ABI的部分。
如果您传递了无效指针,read
将在-EFAULT
中返回eax
,而不会在任何地方存储任何内容。 (你不从传递错误的指针到系统调用得到段错误。)
在strace(strace ./a.out
)下运行您的程序,以查看您的代码所做的所有系统调用。