使用 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"中

好吧,假设您告诉我们的内容是正确的,那么对于可能出错的原因,大致有两种解释:

忽略完全"在那里"的解释,例如"您的 CPU 坏了",push指令上的段错误可能由于两个原因而发生:

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

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

最新更新