根据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宏更易于汇编.