根据the documentation for fgets(),该函数有三个参数:

char * – 一个保存输入的字符串
int – 一个整数,表示要读取的最大字符数
FILE * – 要读取的流的FILE *

我可以轻松调用该函数.我只需将三个参数压入堆栈,调用该函数,并将ESP增加12.

我的问题是参数#3.作为标准输入的FILE *应该传递什么?在C中,我可以使用stdin,但我不知道x86程序集中的等价物是什么.

更新:我在Linux上使用NASM.


解决方法:

stdin的问题在于它是一个宏,它不仅扩展到特定于平台的东西,而且很可能很难从手工装配中访问.如果您愿意牺牲stdio并使用POSIX调用,则stdin与众所周知的文件描述符#0相同.因此,你可以传递0到read,几乎可以得到你想要的东西.我很确定这比stdin C宏更易于汇编.

标签: linux, assembly, file-io, nasm

相关文章推荐

添加新评论,含*的栏目为必填