137得票4回答
Gnu Assembler(GAS)中的CFI指令用于什么?

每行似乎都有一个.CFI指令,并且这些指令有很多种,例如.cfi_startproc,.cfi_endproc等。 在这里了解更多。 .file "temp.c" .text .globl main .type main, @function ...

73得票2回答
GAS: Explanation of .cfi_def_cfa_offset

我希望能够解释GCC生成的汇编代码中使用.cfi_def_cfa_offset指令中的值。我大致知道.cfi指令与调用帧和堆栈展开有关,但我想更详细地了解为什么在我的64位Ubuntu机器上编译以下C程序时,GCC输出的汇编代码中会使用值16和8。#include <stdio.h&gt...

62得票3回答
寄存器%eiz是什么?

在我使用objdump工具转储出的以下汇编代码中:lea 0x0(%esi,%eiz,1),%esi 寄存器%eiz是什么? 上面的代码是什么意思?

60得票5回答
NASM与GAS的实际区别

我并不试图引发Intel vs AT&T之争(无论如何,现在他们都支持Intel语法),也不想询问哪一种“更好”,我只想知道选择其中一种的实际区别。 基本上,几年前我学习了一些基本的x86汇编语言,我使用NASM,只是因为我读的书也是用它的 - 这使我无意中成为NASM阵营的一员。自...

57得票5回答
在x86 win32平台上,GCC生成的一个空程序的汇编输出

我编写空程序并不是为了惹恼stackoverflow的程序员们,只是在探索GNU工具链。 现在下面的内容可能对我来说太深奥了,但为了继续我的空程序探险之旅,我开始研究C编译器的输出,也就是GNU as所使用的东西。 gcc version 4.4.0 (TDM-1 mingw32) t...

46得票7回答
在Linux x86 GAS汇编中,是否有可能创建线程而不使用系统调用?

在学习“汇编语言”(在Linux上使用GNU assemblers在x86架构中)时,其中一个“啊哈”时刻是可以使用系统调用。这些系统调用非常方便,有时甚至是必要的,因为您的程序运行在用户空间。但是从性能的角度来看,系统调用相当昂贵,因为它们需要中断(以及当然的系统调用),这意味着必须从当前活...

38得票4回答
在汇编语言中,cltq是什么作用?

0x0000000000400553 <main+59>: mov -0x4(%rbp),%eax 0x0000000000400556 <main+62>: cltq 0x0000000000400558 <main+64>: sh...

37得票1回答
如何在64位汇编程序中使用RIP相对寻址?

如何在Linux AMD64架构的汇编程序中使用RIP相对寻址?我正在寻找一个简单的例子(Hello World程序),演示如何使用AMD64 RIP相对寻址模式。 例如,下面的64位汇编程序用于普通(绝对寻址):.text .global _start _start: m...

26得票4回答
从C语言调用汇编函数

我正在尝试在C项目中调用汇编函数。这个函数应该调用一个libc函数,比如printf(),但我一直遇到段错误。 在.c文件中,我有这个函数的声明,比如int do_shit_in_asm() 在.asm文件中我有.extern printf .section .data p...

26得票2回答
如何使用GNU GAS汇编器生成像nasm -f bin一样的纯二进制文件?

我有一些NASM文件,它们通常具有以下结构: [BITS 64] [ORG 0x0000000000200000] start: ... ret 我是这样组装它们的:nasm -f bin abc.asm 我想使用GAS来编写其...