问题
$cat main.c
#include <stdint.h>
#include <stdio.h>
typedef int (*pfn_test)(void);
#define UTEST __attribute__(( unused, section("mysection")))
int UTEST func1(void)
{
printf("func is %s\n", __func__);
}
static int UTEST func2(void)
{
printf("func is %s\n", __func__);
}
extern pfn_test __start_mysection;
extern pfn_test __stop_mysection;
int main(int argc, char *argv[])
{
printf("start sec %p\n", &__start_mysection);
printf("stop sec %p\n", &__stop_mysection);
printf("func1 %p\n", func1);
printf("func2 %p, %lu\n", func2, func2 - func1);
pfn_test pfn = &__start_mysection;
printf("size %lu\n", sizeof(pfn));
for (int i = 0; i <3; ++i) {
printf("addr %p\n", pfn++);
}
pfn = &__start_mysection;
for (int i = 0; i <2; ++i) {
pfn();
pfn += 27;
}
printf("done");
}
$ gcc main.c && ./a.out
start sec 0x4006a2
stop sec 0x4006d8
func1 0x4006a2
func2 0x4006bd, 27
size 8
addr 0x4006a2
addr 0x4006a3
addr 0x4006a4
func is func1
func is func2
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.