【问题标题】:Where is the string stored after sys_read?sys_read 之后的字符串存储在哪里?
【发布时间】:2016-06-14 14:54:06
【问题描述】:

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

【问题讨论】:

  • 我们可以看看你的代码吗?点击问题下方的“编辑”,粘贴代码,然后保存问题。
  • 通常在进行系统调用之前,您必须在 ECXRSI(取决于平台)中放入一个指向字符串所在的缓冲区的指针被写入。
  • 你在为什么操作系统编程?

标签: assembly system-calls


【解决方案1】:

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

作为 Margaret Bloom cmets,x86-64 Linux 通过 rsi 中的第二个 syscall arg,而 i386 Linux 在 ecx 中通过第二个 int 0x80 arg。有关更多详细信息,请参阅 标签 wiki 的系统调用/ABI 部分。


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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多