sys_read之后存储的字符串在哪里?

时间:2016-06-14 14:54:07

标签: assembly system-calls

我正在学习使用AT& T语法的汇编语言,我想从终端读取一些字符串,以便稍后使用它。 因此我想使用systemcall read,但我不知道之后存储字符串的位置。有谁能告诉我如何找到字符串?

1 个答案:

答案 0 :(得分:1)

它存储在the 2nd arg you passed to read(2)指向的缓冲区中。

正如Margaret Bloom评论的那样,x86-64 Linux传递了syscall中的第二个rsi arg,而i386 Linux传递了int 0x80中的第二个ecx arg。有关更多详细信息,请参阅标记wiki有关系统调用/ ABI的部分。

如果您传递了无效指针,read将在-EFAULT中返回eax,而不会在任何地方存储任何内容。 (你从传递错误的指针到系统调用得到段错误。)

在strace(strace ./a.out)下运行您的程序,以查看您的代码所做的所有系统调用。