以下链接解释了UNIX(BSD风格)和Linux的x86-32系统调用约定:
但是UNIX和Linux上的x86-64系统调用约定是什么?
测试平台是32位Linux.
基本上,我知道gcc可以用来生成Intel和At&T样式的汇编代码,但似乎你不能直接使用nasm/tasm来编译生成的Intel样式汇编代码.
我正在Windows和Linux平台上进行项目分析asm代码,所以我想如果它们都可以由像nasm\yasm这样的平台独立汇编程序编译,我可以有一个更容易的时间......
所以我的问题是如何从Linux上的c源代码生成一个nasm可编译的汇编代码?
所以我有一个简单的C程序循环传递给main的args然后返回:
#include <stdio.h>
int main(int argc, char *argv[])
{
int i;
for(i = 0; i < argc; ++i) {
fprintf(stdout, "%s\n", argv[i]);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我想看看gcc如何用NASM格式写出程序集.我正在查看.asm文件中的输出,并注意到语法是TASM.下面是make文件和gcc的输出.我做错了还是gcc没有输出真正的NASM语法?
all: main
main: main.o
ld -o main main.o
main.o : main.c
gcc -S -masm=intel -o main.asm main.c
nasm -f elf -g -F stabs main.asm -l main.lst
Run Code Online (Sandbox Code Playgroud)
和
.file "main.c"
.intel_syntax noprefix
.section .rodata
.LC0:
.string "%s\n"
.text
.globl main
.type main, @function
main:
push ebp
mov ebp, esp
and esp, -16
sub esp, …Run Code Online (Sandbox Code Playgroud)