2017-06-06 30 views
2

(ともEGLIBC、私は信じている)は、libc.soライブラリはmain()メソッドを持っている)(メインと共有ライブラリの作成:が<a href="https://www.gnu.org/software/libc/" rel="nofollow noreferrer">glibc</a>で

$ /lib/i386-linux-gnu/libc.so.6 
GNU C Library (Debian GLIBC 2.19-18+deb8u1) stable release version 2.19, by Roland McGrath et al. 
Copyright (C) 2014 Free Software Foundation, Inc. 
This is free software; see the source for copying conditions. 
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A 
PARTICULAR PURPOSE. 
Compiled by GNU CC version 4.8.4. 
Compiled on a Linux 3.16.7 system on 2015-08-30. 
Available extensions: 
     crypt add-on version 2.1 by Michael Glad and others 
     GNU Libidn by Simon Josefsson 
     Native POSIX Threads Library by Ulrich Drepper et al 
     BIND-8.2.3-T5B 
libc ABIs: UNIQUE IFUNC 
For bug reporting instructions, please see: 
<http://www.debian.org/Bugs/>. 

は、今私は、次の最小限の例と同じことをやりたいと(つまり、私は)ので、私自身もmain()を持つようにしたい:

定期的な実行可能ファイルとしてリンク
#include <stdio.h> 

int main(int argc, char *argv[]) { 
     printf("Hello, World!\n"); 
     return 0; 
} 

ここで、共有オブジェクトとしてリンク

$ gcc -g -O0 -Wall -c test.c 
$ gcc -shared -o libtest.so test.o 
$ ./libtest.so 
Segmentation fault 
  • nmをデバッグするとき、gdbが意味のあるバックトレースを示していない
  • 000004f5 T mainmainシンボルが存在することを示しています。
  • -fpicまたは-fPICをgccコマンドラインに追加することは役に立ちません。

私は間違っていますか?

+0

@Someprogrammerdude解決したい特に問題はありません。私は、 'main()'がほとんど役に立たないということを完全に理解しています。私はちょうどそれがglibcでどのように行われているかを調べようとしています。 – Bass

答えて

4

libc.soライブラリは、main()メソッド

いいえ、GCCのCライブラリの実装では、エントリポイントではないメインシンボルを有しています。

これを行う方法の例は、hereです。

関連する問題