假如您沒(méi)有應(yīng)用程序的源代碼并且由于 C 的 GNU 庫(kù)(glibc)函數(shù)正將某些錯(cuò)誤信息返回給該應(yīng)用程序而使它失敗,那么您該怎么辦?因?yàn)?glibc 是開(kāi)放源碼,所以您當(dāng)然可以獲得其源代碼、對(duì)它進(jìn)行更改、重新構(gòu)建和安裝。然而,這不適合那些膽怯的人,因?yàn)殡m然 API 有很好的文檔說(shuō)明,但 GNU C 庫(kù)的內(nèi)部組織卻沒(méi)有。查找正確的函數(shù)原型只是眾多挑戰(zhàn)中的第一個(gè)。它還是一個(gè)很大的包,所以第一次編譯時(shí),它將花一些時(shí)間(glibc 2.2.2 有 8552 個(gè)文件和 1775440 行代碼,包括注釋)。
# # Here is a program that calls setresgid() for testing # setresgid-tester: setresgid-tester.c gcc -o setresgid-tester setresgid-tester.c 文件 libfuncs.c 包含我的 setresgid() 專用版本。實(shí)現(xiàn)它以支持與原始 setresgid() 相同的參數(shù)數(shù)目時(shí)要小心,并在其它方面完成與原始 setresgid() 相同的操作,盡管我的版本欺騙該應(yīng)用程序并始終返回 0。