2016-05-18 7 views
2

Ich habe versucht, den Prototyp für die getpgrp() Funktion in unistd.h nachschlagen, aber konnte es nicht finden. Die einzige Zeile mit getpgrp in dieser Datei war die Zeile libc_hidden_proto (tcgetpgrp) und ich nehme an, das ist ein Makro, aber ich weiß nicht, was es tut.Was macht libc_hidden_proto in den glibc Standard-Bibliotheken?

Ich googelte, konnte aber keine Erklärungen im Internet finden, was libc_hidden_proto tatsächlich tut. Jede Erklärung darüber, was der Zweck dieses Makros in glibc ist, würde geschätzt werden.

+0

Welche Version von glibc verwenden Sie? Ich habe nirgendwo 'libc_hidden_proto', aber ich erinnere mich daran aus alten Zeiten ... – o11c

+0

Das ist seltsam. Ich benutze Glibc 2.19, aber ich schaue auch auf die Unistd.h Header-Datei in glibc 2.18, 2.20, 2.21 und 2.23 und ich sehe libc_hidden_proto in all diesen Versionen. –

Antwort

2

Sie haben versehentlich die interne Kopie (include/unistd.h) anstelle der öffentlichen Kopie (posix/unistd.h) angeschaut. Nein, ich verstehe auch nicht, wie glibcs ​​Quelle organisiert ist.

Von 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

Danke. Ich habe eigentlich schon gelesen, was es in libc-symbols.h sagt, aber ich habe nicht verstanden, was ein PLT war und deshalb habe ich in meiner Frage keine libc-Symbole erwähnt. Aber +1 für deine Antwort sowieso. Jetzt lese ich die PLT-, GOT-, ELF-Dateien, Linker, das dynamische Laden und den Rest der anderen Millionen Dinge, die ich nicht kenne: P –

+0

@jerry im Grunde ist es wie '-semantisch-interposition' für nur diese Symbole. Und es funktioniert nur in Glibc wegen all der anderen verrückten Sachen, die sie machen. – o11c