我想了解如何做的Hello World程序的工作原理:如何理解glibc交叉引用?
#include <stdio.h>
int main(int argc, char **argv) {
printf("Hello World!");
return 0;
}
大部分是簡單,除了printf
部分。我不知道它是如何工作的。爲了理解它,我找了glibc cross reference,發現this page。
然後我搜索了printf
,它給我帶來了很多results。
現在我的程序正在使用這些printf
中的哪一個?我如何確定它?
另外,例如打開first result在該頁面時,在printf
功能的功能使我__printf_chk,其中__printf_chk
功能使我__nldbl___vfprintf_chk,其中__nldbl___vfprintf_chk
功能使我__vfprintf_chk,其中功能__vfprintf_chk
將我引向__nldbl___vfprintf_chk,它創建了一個無限遞歸。這是怎麼回事?
總之,我該如何追蹤給定函數/源代碼的來源?
發現「現在這些用printfs我的程序正在使用?如何確定呢?一」你應該弄清楚圖書館是如何建造的。這主要取決於如何調用編譯器,這是在Makefiles中定義的。這可能是不可讀的。不是glibc好玩嗎? (破壞者:glibc不好玩) –
另一個破壞者:你最終會在[vfprintf in stdio-common/vfprintf.c]中定義(http://osxr.org/glibc/source/stdio- common/vfprintf.c#0221),但要查看'__printf'之類的函數與函數之間的關係,則必須通過大量的預處理宏和GCC特定的屬性聲明。 –
@Rhymoid是所有這些創建/保存可移植性的原因嗎? – Utku