带有x86代码的Segfault

时间:2012-05-15 11:36:27

标签: assembly x86

我正在研究c到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”

1 个答案:

答案 0 :(得分:3)

好吧,假设你告诉我们的内容是正确的,大概有两种解释可能出错:

忽略完全“那里”的解释,例如“你的CPU坏了”,push指令的段错误可能有两个原因:

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

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