强制gcc使用系统调用

时间:2017-03-08 06:46:26

标签: c linux gcc assembly x86

所以我目前正在学习汇编语言(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;
}

这是一个简单的代码,所以我知道它与syscalls的外观。但是如果我有一些更复杂的代码,我不想乱用并替换每个call printf并修改其他寄存器,cuz gcc生成的printf代码,我应该用syscalls。那么我可以以某种方式使gcc使用系统调用生成汇编代码(例如I / O(控制台,文件)),而不是使用C库吗?

1 个答案:

答案 0 :(得分:1)

在Linux下,存在宏族[15:50:23.779] *** Setup started [15:50:25.435] Setup version: Inno Setup version 5.5.8 (a) [15:50:25.437] Original Setup EXE: C:\dev\innosandbox\Output\setup.exe [15:50:25.439] Setup command line: /SL5="$82622,56832,56832,C:\dev\innosandbox\Output\setup.exe" /SPAWNWND=$92602 /NOTIFYWND=$1A2580 /DEBUGWND=$5310D8 [15:50:25.440] Windows version: 10.0.14393 (NT platform: Yes) [15:50:25.441] 64-bit Windows: Yes [15:50:25.443] Processor architecture: x64 [15:50:25.445] User privileges: Administrative [15:50:25.446] 64-bit install mode: No [15:50:25.450] Created temporary directory: C:\Users\Keith\AppData\Local\Temp\is-E13L9.tmp [15:50:35.234] Hello from COM dll 来生成系统调用,其中X命名参数的数量。它被标记为过时,但恕我直言仍在工作。例如,以下代码应该有效(此处未测试):

Dim objXL
Set objXL = WScript.CreateObject("InnoCom.Inno")