2016-05-18 1 views
2

J'essayais de rechercher le prototype de la fonction getpgrp() dans unistd.h mais je ne pouvais pas le trouver. La seule ligne contenant getpgrp dans ce fichier était la ligne libc_hidden_proto (tcgetpgrp) et je suppose que c'est une macro, mais je ne sais pas ce qu'il fait.Que fait libc_hidden_proto dans les bibliothèques standard glibc?

J'ai recherché sur Google ce que libc_hidden_proto fait réellement. Toute explication sur le but de cette macro dans la glibc serait appréciée.

+0

Quelle version de glibc utilisez-vous? Je n'ai pas 'libc_hidden_proto' n'importe où, mais je m'en souviens d'un autre temps ... – o11c

+0

C'est étrange. J'utilise glibc 2.19 mais je regarde aussi le fichier d'en-tête unistd.h dans glibc 2.18, 2.20, 2.21, et 2.23 et je vois libc_hidden_proto dans toutes ces versions. –

Répondre

2

Vous avez accidentellement regardé la copie interne (include/unistd.h) au lieu de la copie publique (posix/unistd.h). Non, je ne comprends pas non plus comment la source de glibc est organisée.

De include/libc-symbols.h:

The following macros are used for PLT bypassing within libc.so 
    (and if needed other libraries similarly). 
    First of all, you need to have the function prototyped somewhere, 
    say in foo/foo.h: 
    int foo (int __bar); 
    If calls to foo within libc.so should always go to foo defined in libc.so, 
    then in include/foo.h you add: 
    libc_hidden_proto (foo) 
+0

Merci. J'ai déjà lu ce qui est écrit dans libc-symbols.h mais je n'ai pas compris ce qu'est un PLT et je n'ai donc pas mentionné libc-symbols dans ma question. Mais +1 pour votre réponse de toute façon. Maintenant, je vais lire sur les fichiers PLT, GOT, ELF, les liens, le chargement dynamique et le reste des autres millions d'autres choses que je ne connais pas: P –

+0

@jerry fondamentalement, c'est comme '-fsemantic-interposition' pour juste ces symboles. Et ça ne marche que dans la glibc à cause de tous les autres trucs fous qu'ils font. – o11c