栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在汇编中使用printf会导致输出空

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在汇编中使用printf会导致输出空

使用 诸如printf之类的stdio函数后,请使用

call exit
而不是原始
_exit
syscall。


正如Michael解释的那样,可以动态链接C库。这也是《自下而上编程》一书中介绍的方式(请参见第8章)。

但是,重要的是

exit
从C库调用以结束程序而不是绕过程序,这是我错误地通过调用来完成的
exit-syscall
。正如Michael所暗示的,exit会像冲洗流一样进行大量清理。

这是发生了什么事:作为解释这里的C-库缓冲区的如下标准流:

  1. 没有缓冲用于标准错误。
  2. 如果标准输出/输入是终端,则它是行缓冲的。
  3. 如果标准输出/输入不是终端,则它是完全缓冲的,因此在写入结束时需要刷新。

确定哪种情况适用于何时

printf
首次为流调用。

因此,如果

printf_try
直接在终端中调用,则可以看到程序的输出,因为
hello
n
在末尾(在行缓冲模式下触发刷新),并且它是一个终端,也就是2.
case。

printf_try
通过调用
$(./printf_try)
意味着stdout不再是终端(实际上我不知道它是临时文件还是内存文件),因此3.情况有效-需要显式刷新,即调用C -
exit



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/374367.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号