2015-12-13 108 views
2

解析內存中已經加載的Mach-O二進制文件...爲什麼__LINKEDIT有時會關閉0x1000?

有時候,字符串表,符號表等是它們應該在的位置,有時它們是0x1000 off。

例如,我可能運行我的程序,並且baseOffset + cmd->symoff是準確的。然後我會單元測試,並且baseOffset + cmd->symoff + 0x1000是準確的。 baseOffset始終有效並指向有效的Mach標頭。

回答

2

我通過查看dyld源代碼計算出來... 0x1000 off不保證,但是,鏈接編輯偏移量是: baseImageOffset + linkedit.vmaddr - linkedit.fileoff。大部分時間這個差別是0,但有時不是。

這會影響LC_FUNCTION_STARTS(CMD-> dataoff)和LC_SYMTAB(CMD-> stroff和CMD-> symoff)

相關問題