Ich habe folgende C-Programm:Wie findet mein Compiler die Stat (File Status) -Funktion?
#include <sys/stat.h>
int main(int argc, char **argv) {
struct stat fileStat;
if(stat(argv[1],&fileStat) < 0)
return 1;
}
Als ich es LLVM IR mit Clang kompiliert, kann ich sehen, dass stat
wie folgt erklärt:
declare i32 @stat(i8*, %struct.stat*)
Normalerweise sind solche, einen externen Anruf an Eine Systemfunktion wird direkt einer C-Standardbibliotheksfunktion zugeordnet. Zum Beispiel kann ich malloc
mit dem folgenden:
nm -D /lib/x86_64-linux-gnu/libc.so.6 | grep malloc
jedoch die stat
Funktion anders behandelt zu werden scheint. Wenn ich für stat
greife, kann ich verwandte Funktionen wie __xstat
aber nicht die stat
Funktion selbst finden.
Wenn ich den Aufruf an die externe Bibliothek mit ltrace
verfolgen, sehe ich den folgenden Aufruf: __xstat(1, ".", 0x7fff7928c6f0)
. Auch der Code in der ausführbaren Datei bestätigt, dass anstelle des Aufrufs der stat
Funktion die __xstat
Funktion aufgerufen wird.
Ich habe andere Funktionsaufrufe an die C-Standardbibliothek nicht beobachtet, die andere als die im C-Programm deklarierten Namen haben. Warum gibt es kein direktes Äquivalent in der Standardbibliothek und wie findet mein Compiler heraus, dass es einen Aufruf an __xstat
und nicht an stat
erzeugen sollte?
Dies kann Ihnen eine Menge helfen http://stackoverflow.com/questions/8237294/intercepting-stat –