2
static void cleanup __attribute__ ((destructor));
該函數只是打印調試消息的令牌析構函數;令牌程序運行正常(main()僅打印另一條消息;退出時打印令牌函數)。
當我看到文件與
nm ./a.out,
我看到:
08049f10 d __DTOR_END__
08049f0c d __DTOR_LIST__
然而,令牌析構函數的地址應在0x08049f10
- 包含0的地址,表示析構函數的結束列表,因爲我可以檢查使用:
objdump -s ./a.out
在0x08049f0c
,我看到0xffffffff
,正如預期的這個位置。我的理解是,我在elf文件中看到的意思是沒有註冊析構函數。但它是用一個執行的。
如果有人能解釋,我會很感激。安全套件的這部分是爲了防止插入惡意析構函數嗎?編譯器如何跟蹤析構函數的地址?
我的系統:
- 的Ubuntu 12.04。
- ELF32-I386
- 內核:3.2.0-30-仿製PAE
- gcc版本:4.6.3
我不知道如何解決佈局問題:粗體面的屬性(類似於nm p/o中的後面)實際上是2個前導和尾部_的屬性。 – gnometorule
是的,那裏的格式看起來很奇怪。它可能是一些不可打印的字符? (在此期間,我試圖修復它,看起來是否正確?) –
完美!非常感謝。我注意到之前從我的iPhone上提交的SO生成不正確的佈局。也許就是這樣。 – gnometorule