Re: [問題]gnu gcc segmation fault

看板Programming作者 (..)時間13年前 (2012/05/06 14:47), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串2/2 (看更多)
"-e main" 會讓loader直接call你的main() 在執行main()的最後一行ret instruction時,stack上的caller addr恐怕不是有效的 這應該是seg fault的原因,你可以用gdb單步執行試試 由於這個binary沒有link _start(),你的main()在執行時沒有c runtime environment 這使得main()的input parameter是無效的,而return value也無意義 ※ 引述《stevenlin08 (stevens)》之銘言: : 大家好, : 以gcc -c + ld : 是為了想一步步地了解其linker'loader'libary : 而想要了解在下gcc 時它的default make file內容. : 目前,是先用 : 0. : 使用gcc -v main.c,來看其相關的 : 1. : $gcc -c main.c -o main.o : 2. : $ld main.o -e main -lc -m elf_i386 -I /lib/ld-linux.so.2 : (-lc 為printf的libary, ld-linux.so.2則為在loader時需需需的lib) : 3.雖然,可以成功的linker了. : 但在其程序行時,卻又出現了segmation fault. : 因為其在gcc -v中有太多的設定. : 不知有那些必要的.或是該如何來修正其錯誤. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 211.74.93.253

05/07 22:34, , 1F
所以,即是沒有c runtime environment?
05/07 22:34, 1F

05/16 13:17, , 2F
是的,將crt也link就不會seg fault了
05/16 13:17, 2F
文章代碼(AID): #1FfXvmRt (Programming)
討論串 (同標題文章)
文章代碼(AID): #1FfXvmRt (Programming)