在不使用 libc 的情况下如何获取输入或打印输出?我可以使用系统调用,但不知道这是否有帮助。
问问题
295 次
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 回答