У меня следующая программа C:Как мой компилятор находит функцию stat (статус файла)?
#include <sys/stat.h>
int main(int argc, char **argv) {
struct stat fileStat;
if(stat(argv[1],&fileStat) < 0)
return 1;
}
Когда я скомпилировать его с LLVM ИК использования Clang, можно увидеть, что stat
объявляются следующим образом:
declare i32 @stat(i8*, %struct.stat*)
Обычно такого внешний вызов системная функция непосредственно сопоставляется с стандартной библиотечной функцией C. Например, я могу найти malloc
следующим:
nm -D /lib/x86_64-linux-gnu/libc.so.6 | grep malloc
Однако функция stat
кажется, трактуется по-разному. Когда grepping для stat
, я могу найти связанные функции, такие как __xstat
, но не функцию stat
.
Когда я отслеживаю звонок во внешнюю библиотеку с помощью ltrace
Я вижу следующий звонок: __xstat(1, ".", 0x7fff7928c6f0)
. Также код в исполняемом файле подтверждает, что вместо вызова функции stat
вызывается функция __xstat
.
Я не наблюдал других вызовов функций в стандартной библиотеке C, которые имеют другие имена, чем те, которые были объявлены в программе C. Почему в стандартной библиотеке нет прямого эквивалента, и как мой компилятор узнает, что он должен вызвать вызов __xstat
, а не stat
?
Это может помочь вам много http://stackoverflow.com/questions/8237294/intercepting-stat –