Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 奇怪的分段故障,程序集(x86)_Assembly_X86 - Fatal编程技术网

Assembly 奇怪的分段故障,程序集(x86)

Assembly 奇怪的分段故障,程序集(x86),assembly,x86,Assembly,X86,我有以下x86代码: .section .rodata .text subl $440, %esp movl %esp, %ecx subl $24, %esp .globl main .type main, @function main: pushl %ebp movl %esp, %ebp andl $-16, %esp movl $1, %eax

我有以下x86代码:

    .section    .rodata
    .text
    subl    $440, %esp
    movl    %esp, %ecx
    subl    $24, %esp
    .globl  main
    .type   main, @function
main:
    pushl   %ebp
    movl    %esp, %ebp
    andl    $-16, %esp
    movl    $1, %eax
    movl    $4, %edx
    imul    %edx, %eax
    movl    $2, %edx
    addl    %ecx, %eax
    movl    %edx, 24(%eax)
    movl    $0, %eax
    nop
    leave
    ret
    .size   main, .-main

该程序在使用gcc编译时给出了转储的分段错误核。但是,删除movl%edx、24%eax会删除错误。我是装配新手,请告诉我我做错了什么

您在主标签之前有代码,因此代码不会执行,但将是必需的,因为这是在设置ecx。您应该将这3行下移到andl$-16、%esp行之后。作为对删除的注释的回复,该注释询问将代码移动到main的开头:如您所见,这是允许的,但不起作用。这种情况下的错误将出现在函数末尾,因为您没有正确恢复堆栈。ebp由LEVE指令使用,因此必须将其设置为esp.@Jester的初始值。但是,我想在执行main之前更改堆栈指针,我不想在序言中更改堆栈指针。有办法吗?请把你的答复作为答复贴出来,这样我就可以接受了。