gpt4 book ai didi

c - GAS Assembly 程序段错误(写入自动变量)

转载 作者:可可西里 更新时间:2023-11-01 11:48:27 25 4
gpt4 key购买 nike

我打算用 C:

#include<stdio.h>
int main() {
int arr[5];
arr[0] = 5;
arr[1] = 0;
arr[2] = 1;
arr[3] = 3;
arr[4] = 4;
int max = 0;
for(int i = 0;i < 5;i++)
if(max < arr[i])
max = arr[i];
printf("%d\n", max);
return 0;
}

这是我的代码链接:array_max.s .这是我的 AT&T 格式的汇编代码:

.data

.text
.globl _start
_start:
movl $5, -20(%ebp)
movl $0, -16(%ebp)
movl $1, -12(%ebp)
movl $3, -8(%ebp)
movl $4, -4(%ebp)
movl $0, %ecx
movl $5, %eax
loop:
cmp $0, %eax
je terminate
cmp %ecx, -20(%ebp,%eax,4)
jg assign
jmp loop


terminate:
movl $4, %eax
movl $1, %ebx
movl $1, %edx
int $0x80
movl $1, %eax
int $0x80
ret

assign:
movl -20(%ebp,%eax,4), %ecx
ret

我在第一条指令 movl $5, -20(%ebp) 上遇到段错误。我是新手,请帮忙。

最佳答案

I am having a segmentation fault on the very first instruction movl $5, -20(%ebp).

您没有在堆栈上为 arr 分配任何空间(即:int arr[5]):

pushl %ebp
movl %esp, %ebp
subl $20,%esp //<--- memory allocation

为了通过恢复先前的堆栈帧来释放在堆栈上分配的内存,请在 ret 之前使用 leave 指令。

关于c - GAS Assembly 程序段错误(写入自动变量),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45857329/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com