1

在不使用 libc 的情况下如何获取输入或打印输出?我可以使用系统调用,但不知道这是否有帮助。

4

2 回答 2

1

我通过write(2)gdb 逐步了解系统调用 ABI 的工作原理。

无论如何,根本没有libc。请注意,如果没有特殊技巧,cc(1) 编译器/链接器前端仍会将您与 libc 链接,但您不会将它用于任何事情。C 运行时启动代码将进行一些 libc 调用,但该程序不会。

void mywrite(int fd, const void *b, int c) {
  asm("movl $1, %eax");
  asm("syscall");
}

int main(void) { const char *s = "Hello world.\n"; return mywrite(1, s, 13), 0; }
于 2013-02-08T16:45:10.910 回答
1

没有独立于平台的方法可以做到这一点。事实上,拥有的全部意义在于libc为大多数系统提供的一组功能提供一个通用接口,但以根本不同的方式实现。

您最好的选择可能是查阅您当前使用的任何系统的文档。您可以查找操作系统的中断集,然后尝试使用asm关键字编写汇编指令,告诉操作系统读取输入或显示输出。您可以查看操作系统提供的用于对文件描述符进行输入和输出的库,然后改用这些函数。或者,您可以查看进程创建库,然后生成一个进程以从控制台读取或写入数据,其中第二个程序使用libc. 但是,这些都不能保证是可移植的。

希望这可以帮助!

于 2013-02-09T20:04:17.340 回答