强制gcc使用系统调用

强制gcc使用系统调用,c,linux,gcc,assembly,x86,C,Linux,Gcc,Assembly,X86,所以我目前正在学习汇编语言(AT&Tsyntax)。我们都知道,gcc有一个选项,可以使用-S参数从C代码生成汇编代码。现在,我想看看一些代码,它在汇编中的外观。问题是,在实验室中,我们使用as+ld编译它,而现在,我们不能使用C库。例如,我们不能使用printf。我们应该通过系统调用来完成(32位就足够了)。现在我有了C语言的代码: #include <stdio.h> int main() { int a = 5; int b = 3; int c =

所以我目前正在学习汇编语言(
AT&T
syntax)。我们都知道,
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;
}
#包括
int main()
{
INTA=5;
int b=3;
INTC=a+b;
printf(“%d”,c);
返回0;
}

这是一段简单的代码,所以我知道它在系统调用中会是什么样子。但是如果我有一些更复杂的代码,我不想乱来,替换每个
调用printf
并修改其他寄存器,因为gcc为printf生成了代码,我应该在syscalls中使用它。因此,我可以通过某种方式使
gcc
使用系统调用(例如,I/O(控制台,文件))生成汇编代码,而不是使用C libs吗?

在Linux下,存在宏系列
\u syscallX
,以生成一个系统调用,其中X指定了参数的数量。它被标记为已过时,但IMHO仍在工作。例如,以下代码应该可以工作(此处未测试):


GCC不知道如何为
printf
生成代码,除非调用C库函数。嗯,好的。因此,如果我在
C
而不是
printf
中插入一些汇编代码,那么它就可以工作了……手册的第2节列举了POSIX。你可以用这些来开始。调用约定将有所不同,但这应该是可管理的。系统调用是特定于操作系统的。你使用什么操作系统?Linux,64位,但必须编译为32位
_syscall3(int,syswrite,int,handle,char*,str,int len);
// ---

char str[]="Hello, world!\n";
// file handle 1 is stdout
syswrite(1,str,14);