【发布时间】:2017-03-08 06:46:26
【问题描述】:
所以我目前正在学习汇编语言(AT&T 语法)。我们都知道gcc 可以选择使用-S 参数从C 代码生成汇编代码。现在,我想看看一些代码,它在汇编中的样子。问题是,在实验室我们用as+ld 编译它,而目前我们不能使用C 库。例如,我们不能使用 printf。我们应该通过系统调用来完成(32 位就足够了)。现在我在 C 中有这段代码:
#include <stdio.h>
int main()
{
int a = 5;
int b = 3;
int c = a + b;
printf("%d", c);
return 0;
}
这是简单的代码,所以我知道它在系统调用中的样子。但是如果我有一些更复杂的代码,我不想乱来替换每个call printf 并修改其他寄存器,因为gcc 为printf 生成了代码,我应该用系统调用来处理它。那么我能否以某种方式让gcc 使用系统调用(例如用于 I/O(控制台、文件))而不是使用 C 库生成汇编代码?
【问题讨论】:
-
GCC 不知道如何为
printf生成代码,除非调用 C 库函数。 -
嗯,好的。所以也许如果我在
C而不是printf中插入一些汇编代码,那么它会工作...... -
手册的第 2 部分是 dedicated to system calls,它枚举了 POSIX wrappers around the syscalls。您可以使用它们来启动。调用约定会有所不同,但应该是可管理的。
-
系统调用是特定于操作系统的。你用什么操作系统?
-
Linux,64位,但必须为32位编译