-1

我正在使用 ac 到 x86 编译器,实际上我正在生成一些代码行,但是当我尝试启动它时出现分段错误,我无法找出错误的来源。这是代码:

    .file   "test.c"
    .text            
    .globl main
    .type main, @function  
main:                        
    pushl   %ebp                     
    movl    %esp,   %ebp               
    subl    $32,    %esp             
    movl    $2, %eax                        
    movl    %eax,   -4(%ebp) 
    movl    $3, %eax                         
    movl    %eax,   -8(%ebp) 
    movl    -4(%ebp), %eax        
    popl    %ecx         
    addl    %ecx,   %eax  
    pushl   %eax        
    movl    -8(%ebp), %eax                         
    movl    %eax,   -12(%ebp) 

段错误似乎出现在第一条指令“pushl %ebp”

4

1 回答 1

3

好吧,假设您告诉我们的内容是正确的,对于可能出现的问题,大致有两种解释:

完全不考虑“外面”的解释,比如“你的 CPU 坏了”,一条push指令的段错误可能有两个原因:

  • 堆栈未正确设置,因此指令试图将数据推送到只读或未映射地址,或
  • 包含指令本身的内存页未标记为可执行。

根据给出的信息,不可能说这两者中的哪一个导致了问题。你必须确定这一点。(或者给我们一些更多的信息,例如,关于代码是如何被执行的)

于 2012-05-15T12:38:01.590 回答