Segmentation fault when pushing on stack (NASM)

前端 未结 1 1364
滥情空心
滥情空心 2021-01-17 01:14

I\'m trying to get a nasm program running. The following code:

segment .data

contAir:    dt 1.11330e-10
constOil:   dt 2.33656e-10

segment .text

global c         


        
1条回答
  •  野趣味
    野趣味 (楼主)
    2021-01-17 01:47

    I get a segmentation fault (core dump) when pushing ebp on the stack. Why is that? I'm running this code on an Ubuntu virtual machine. Funny thing is, sometimes I get an "illegal instruction" error.

    I'd bet that you're not getting the segmentation fault at the push, but rather at the ret. What the ret instruction does is pop the return address from the stack (which typically will have been pushed there by a call instruction) and jumps to it.

    So when you do this:

    push ebp
    ret
    

    You're effectively jumping to whatever address happened to be stored in ebp.
    You need to balance the stack before returning - i.e. each push-type instruction should have a corresponding pop-type instruction:

    push ebp
    ; ... other code goes here ...
    pop ebp
    ret
    

    0 讨论(0)
提交回复
热议问题