有人能解释我以下代码的工作原理吗?获取内存部分信息
# 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