如何在x86程序集中调用fgets?

Nat*_*man 4 linux file-io assembly nasm

根据文档fgets(),该函数有三个参数:

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

我可以轻松调用该函数.我只push将三个参数放到堆栈上,调用函数,并增加ESP12.

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


更新:我在Linux上使用NASM.

zne*_*eak 5

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