某行代碼地址 = ASLR造成的偏移 + 本行代碼在文件中的地址
imagelist:iamge list 與GDB中的”info shared”類似,用于列舉當前進程中的所有模塊(image).因為ASLR的關(guān)系,每次進程啟動時候,同一進程的所有模塊會在虛擬內(nèi)存中的起始地址都會產(chǎn)生隨機偏移
如:進程A中有一個模塊B,B的模塊大小是100字節(jié),進程A第一次啟動時,模塊B可能會被加載到虛擬內(nèi)存的0x00到oxC4,第二次啟動會被加載到0x10到0x74,第三次啟動會別加載到0x60到0xC4,也就是說它的大小雖然沒變,但起始地址每次都在變化,而這個地址就是會頻繁用到的一個關(guān)鍵數(shù)據(jù)—->獲得這個數(shù)據(jù)的途徑:LLDB啟動后,輸入”image list -o -f”命令
模塊在內(nèi)存中起始地址—>?模塊基地址(image base adress)
NSLog的基地址 = NSLog在Foundation中的相對位置 + Foudation的基地址
公式推導:
偏移后模塊基地址 = 偏移前模塊基地址 + ALSR偏移
偏移后符號基地址 = 偏移前符號基地址 + 符號所在模塊的ALSR偏移
偏移后指令基地址 = 偏移前符號基地址 + 指令所在模塊的ALSR偏移