有人能解釋我以下代碼的工作原理嗎?獲取內存部分信息
# if defined(__ELF__)
# define __SECTION_FLAGS ", \"aw\" , @progbits"
/* writable flag needed for ld ".[cd]tors" sections bug workaround) */
# elif defined(__COFF__)
# define __SECTION_FLAGS ", \"dr\""
/* untested, may be writable flag needed */
# endif
asm
(
".section .ctors" __SECTION_FLAGS "\n"
".globl __ctors_begin__\n"
"__ctors_begin__:\n"
".previous\n"
);
asm /* ld ".[cd]tors" sections bug workaround */
(
".section .ctors0" __SECTION_FLAGS "\n"
".globl __ctors0_begin__\n"
"__ctors0_begin__:\n"
".previous\n"
);
同樣,我們也越來越__ctors_end__
,__ctors0_end__
和析構函數的位置也通過這種方式獲得。在一些ld錯誤解決方法之後,執行從__ctors_begin__
到__ctors_end__
指針指向的所有函數。我不知道彙編程序,這個代碼是不可能解釋的。
順便說一句:我知道從C調用C++構造函數/析構函數並不是一項安全或簡單的任務。
對我來說,看起來這段代碼是創建節,沒有得到它們。它從何而來? – 2010-04-15 07:03:25
如果這是部分創建,那麼這個新部分中的構造函數是如何放置的?我最初認爲這是從編譯器放置的傳統名稱的一部分中提取構造函數。 這是用C++編寫的Linux內核驅動程序的一部分。 – Basilevs 2010-04-15 07:13:45