【问题标题】:Error Raised When Attempting to Assign Value At Index of Array With x86 Assembly GNU GAS尝试使用 x86 程序集 GNU GAS 在数组索引处分配值时引发错误
【发布时间】: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


【解决方案1】:

正如@MichaelPetch 所指出的,字节大小必须包含在.fill 语句中:

x:.fill 10, 4

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-09
    • 2020-12-15
    • 1970-01-01
    • 2013-11-18
    • 1970-01-01
    • 1970-01-01
    • 2012-10-25
    相关资源
    最近更新 更多