gpt4 book ai didi

c - 强制 gcc 使用系统调用

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:41:09 25 4
gpt4 key购买 nike

所以我目前正在学习汇编语言(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 库生成汇编代码?

最佳答案

在 Linux 下,存在宏系列 _syscallX 来生成系统调用,其中 X 命名参数的数量。它被标记为过时,但恕我直言仍在工作。例如,以下代码应该可以工作(此处未测试):

_syscall3(int,syswrite,int,handle,char*,str,int len);
// ---

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

关于c - 强制 gcc 使用系统调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42664698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com