[英]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.