作者juichangkuo (..)
看板Programming
标题Re: [问题]gnu gcc segmation fault
时间Sun May 6 14:47:09 2012
"-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
1F:推 stevenlin08:所以,即是没有c runtime environment? 114.33.197.172 05/07 22:34
2F:→ juichangkuo:是的,将crt也link就不会seg fault了 203.18.50.4 05/16 13:17