Linux开放系统调用的意外返回值

时间:2019-11-12 00:39:44

标签: linux assembly x86

我一直在研究Programming from the Ground Up上一本旧的Dell Dimension PC上的书,该PC在2006年左右购买,具有32位体系结构并运行32位Xubuntu安装。我喜欢前6章,并且感觉到到目前为止,我正在“了解”汇编语言,并为自己奠定了进一步学习的良好基础。

但是,我被困在Chapter 7 example(关于书中显示内容的第125页; PDF阅读器认为是的第131页)上。具体来说,当我在open调用之后立即添加自己的无条件跳转时,允许我将%eax的值移至%ebx并因此使用echo $ ?:

进行检查。
  • 当预期的输入文件存在时,对Linux调用5(打开)的调用始终返回 3 。这似乎是有道理的:成功的调用应基于成功的打开返回一个非零的文件描述符。
  • 问题:当输入文件不存在时,Linux调用#5返回 254 。根据我正在研究的书中的内容,加上一些手册页检查和谷歌搜索,我希望它会带来负值。正如书中所写,这应该导致该程序由于%eax值为负而引发错误;但这不会发生。

在设置“不存在”方案时,我对输入文件进行了以下调整:

  1. 以“ .mv后缀”重命名。
  2. 将其移至废纸Basket。
  3. 调整了源文件 add-year.s ,以期获得完全不同的输入文件,该文件名具有几乎确定的长名称,这在我的文件系统的其他位置不可能存在。

在所有3种情况下,系统调用5均返回254。 我想知道,如果找不到文件,它会创建文件吗?但是在我眼前的书中说,将立即数$ 0移入寄存器%ecx会指示系统调用#5打开一个只读文件。

从我的Google搜索中,看起来汇编语言直接击中系统调用不是正常的事情;实际上,程序员会从C调用Linux C包装程序。这是有道理的-我希望以后能学习C-但是,如果能读过本书的人(或者仍然只是向导)会很棒。可以帮助解决此特定错误,从而帮助自己(以及希望本帖子的其他读者)通过本书的示例进行工作,而不必承认失败。

0 个答案:

没有答案