有沒有辦法在objdump中獲得完整的地址? 正在使用的命令是:objdump -d progname
Objdump沒有顯示完整的地址
的前導零不正確的。該地址應該如下:
最後三個在地址值是正確的;但是,我非常希望在objdump中顯示完整的地址。
有沒有辦法在objdump中獲得完整的地址? 正在使用的命令是:objdump -d progname
Objdump沒有顯示完整的地址
的前導零不正確的。該地址應該如下:
最後三個在地址值是正確的;但是,我非常希望在objdump中顯示完整的地址。
在您的應用程序加載之前,您無法確定它將在內存中結束的位置。
試試下面的代碼:
#include <stdio.h>
int main()
{
printf("%p\n", main);
}
與gcc test.c
編譯並運行了好幾次。
我的研究結果表明:
0x55f71f8936b0
0x5630ed7ff6b0
0x558a18eea6b0
...
所以你不能確切地知道它將會在內存結束。我認爲情況並非總是如此,而這種行爲的目的是作爲安全「事情」。如果舊的內核/加載程序在每次運行時給出相同的地址,我不會感到驚訝。不過,我當然不知道。
當然objdump
會給你的相對地址:
00000000000006b0 <main>:
請記住,這個程序的輸出不會給你的物理地址,它們仍然是虛擬的。
的要點是,通過objdump
傾倒地址是從每個執行的接頭和實際的虛擬地址的責任是有,因爲裝載機的。
好的,這使得很多。我正在研究一個較老的內核,並且最近做了一個更新的內核。只是沒有意識到有這個漂亮的安全功能。我蹲了一會兒,然後問道。猜猜我正在尋找錯誤的東西。無論如何,感謝您的信息。 –
請記住,無論您使用哪種加載程序,符號的最終地址都不會提供給objdump。使用較舊的加載器時,這個運行時地址在每次運行時可能都是相同的,但這是唯一的區別,我想。 –
這些地址是從*零*開始的嗎? –
不,當我在edb中運行時,地址顯示爲第二個圖像。 –
我想我的第一個問題是,你正在尋找一個物理或虛擬地址?其次,假設這是一個用戶空間應用程序,我不認爲'objdump'知道內核將在運行時放置應用程序的位置,甚至不太可能知道物理地址。 –