簡體   English   中英

進行分段時出現分段錯誤(核心已轉儲)

[英]Segmentation fault (core dumped) when making compliation

我正在解決涉及創建小型編譯器的任務。 我的編譯器為簡單的賦值語句生成以下匯編代碼

// global declaration
int k;

float x,y,z;
// inside main func
k=10;
x = y = k;

匯編代碼(我遇到了分段錯誤(核心已轉儲)

 #   19
                    # b_push_ext_addr (x)
        subl    $8, %esp
        movl    $x, (%esp)
                    # b_push_ext_addr (y)
        subl    $8, %esp
        movl    $y, (%esp)
                    # b_push_ext_addr (k)
        subl    $8, %esp
        movl    $k, (%esp)
                    # b_deref (signed int)
        movl    (%esp), %eax

# Proplm on next Line ... why?
         movl (%eax), %edx


        movl    %edx, (%esp)
                    # b_convert (signed int -> float)
        fildl   (%esp)
        fstps   (%esp)
                    # b_assign (float)
        movl    (%esp), %edx
        addl    $8, %esp
        movl    (%esp), %eax
        movl    %edx, (%eax)
        movl    %edx, (%esp)
                    # b_deref (float)
        movl    (%esp), %eax
        movl    (%eax), %edx
        movl    %edx, (%esp)
                    # b_convert (float -> double)
        flds    (%esp)
        fstpl   (%esp)
                    # b_convert (double -> float)
        fldl    (%esp)
        fstps   (%esp)
                    # b_assign (float)
        movl    (%esp), %edx
        addl    $8, %esp
        movl    (%esp), %eax
        movl    %edx, (%eax)
        movl    %edx, (%esp)
                    # b_pop ()
        addl    $8, %esp

當我使用gdb時:它指向這一行:

(gdb) x/i $eip
=> 0x80485bd <main+336>:        mov    (%eax),%edx

實際故障也有類似的說明,但還要進一步說明:

    fstps   (%esp)       # stack has some float
                # b_assign (float)
    movl    (%esp), %edx # edx has a float now
    addl    $8, %esp
    movl    (%esp), %eax
    movl    %edx, (%eax)
    movl    %edx, (%esp) # write the float onto stack
                # b_deref (float)
    movl    (%esp), %eax # load the float from stack
    movl    (%eax), %edx # try to use float as pointer => segfault

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM