【发布时间】:2018-07-10 00:41:13
【问题描述】:
我正在使用带有 GCC 的 x86 GNU 程序集,并尝试实现与以下 c/c++ 等效的程序集:
int x[10];
x[0] = 5;
但是,当我尝试(使用命令./a.out)运行下面的汇编代码时(在第一次使用gcc filename.s 编译之后),错误Segmentation fault: 11 会打印到控制台:
.data
x:.fill 10
index:.int 0
.text
.globl _main
_main:
pushq %rbp
movq %rsp, %rbp
subq $16, %rsp
lea x(%rip), %rdi
mov index(%rip), %rsi;
movl $5, %eax;
movl %eax, (%rdi, %rsi, 4);
leave
ret
为了声明数组,我按照此处的说明进行操作:Declaring Arrays In x86 Assembly。
有谁知道为什么会发生这种行为?我在 Mac OSX 上使用 gcc 编译器使用 GNU GAS 语法运行此代码。
【问题讨论】:
-
如果您想要 10 个整数(4 个字节),您需要执行类似
x:.fill 10, 4的操作。您的版本分配 10 个字节(如果未指定,则默认大小为 1) -
@MichaelPetch 非常感谢!如果您可以在答案中写下您的回复,我将很乐意接受。
标签: macos assembly x86-64 gnu-assembler