1 回答

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超11個(gè)贊
問(wèn)題是faketime
使用LD_PRELOAD
環(huán)境變量來(lái)指示程序的動(dòng)態(tài)加載器libfaketime
在啟動(dòng)時(shí)加載。libfaketime
將執(zhí)行所謂的“插入” - 用這些例程的自己的副本替換正常的動(dòng)態(tài)庫(kù)例程 - 這樣當(dāng)將來(lái)進(jìn)行動(dòng)態(tài)庫(kù)調(diào)用時(shí),libfaketime
可以影響發(fā)生的事情。特別是,libfaketime
插入與時(shí)間相關(guān)的調(diào)用,因此它能夠向程序返回假值。
這適用于大多數(shù)程序的原因是它們用于libc
進(jìn)行系統(tǒng)調(diào)用。libc
提供與系統(tǒng)調(diào)用交互的高級(jí)函數(shù),使系統(tǒng)編程更容易。在大多數(shù)使用 的語(yǔ)言中libc
,二進(jìn)制文件是動(dòng)態(tài)鏈接的,這意味著它libc
實(shí)際上并不包含在二進(jìn)制文件中,而是預(yù)期libc
在運(yùn)行二進(jìn)制文件時(shí)系統(tǒng)上將存在(稱為“目標(biāo)文件”)的編譯版本,然后就可以加載動(dòng)態(tài)庫(kù)了。這種動(dòng)態(tài)加載是faketime
通過(guò)LD_PRELOAD
指令實(shí)現(xiàn)的,它改變了加載器的行為。
然而,Go 有兩個(gè)不同之處。首先,它是靜態(tài)鏈接的,因此沒(méi)有加載器可以關(guān)注LD_PRELOAD
. 其次,它不使用libc
,因此即使它是動(dòng)態(tài)鏈接的,并且該LD_PRELOAD
技巧有效,libc
也永遠(yuǎn)不會(huì)被調(diào)用,因此它實(shí)際上仍然無(wú)法實(shí)現(xiàn)欺騙程序使用假時(shí)間函數(shù)的預(yù)期目標(biāo)。
- 1 回答
- 0 關(guān)注
- 466 瀏覽
添加回答
舉報(bào)