我在調試php。當我查看內存中一個我知道指向地址的地方時,我看到了指針 - 例如22810408(0x08048122) - 這是使用CLI的CLI版本。然而,當我使用apache2並嘗試做同樣的事情時,我沒有看到指向真實地址的指針。相反,我看到ELF標題的偏移量,當它添加到ELF標題的地址時,會給我「真實」地址。 例如,如果「真實」地址是0x08048122,並且ELF標頭是0x08048000,那麼我會在同一位置看到22010000(0x122)。爲什麼apache將偏移量保存到php-cli擁有虛擬內存地址的內存中?
當我試圖找出堆棧中某個東西的「真實」地址時,就會出現問題。 「真實」的地址應該是0xbfccxxxx,但是當我把這個數字加到ELF頭部時,事情就不會加起來!我得到了所有錯誤的地址。
我已經試了很長時間的Google搜索,但我真的不知道如何正確地說出這個詞,或者要搜索什麼。
所以,我基本上尋找的是更多的信息爲什麼Apache有一個偏移量,而不是一個真正的內存地址,以及這是如何涉及到堆棧上的地址。任何人都可以給我任何可能澄清的材料的指針?
您是否正在查看可執行文件中尚未加載的偏移量,而不是正在運行的進程中的地址? – ugoren 2012-01-14 19:50:38
這可能是如何工作的。你有關於如何工作的更多信息? – optional 2012-01-14 19:59:44
你的「指針」讓我有更好的搜索結果。看來,對於Apache,PHP是一個.so,不是一個真正的可執行文件。所以,我看到的是偏移量,而不是實際地址,這是原因。我仍然無法完全理解的是如何從我的「偏移」轉到真正的虛擬內存地址。我仍在閱讀,但任何澄清或強制性閱讀將不勝感激。至少現在我明白了,我不能簡單地添加我的ELF地址來獲得正確的地址 - 似乎我需要解析重定位表.. – optional 2012-01-14 20:47:31