首页
社区
课程
招聘
[原创][分享]init_array原理简单说明
发表于: 2014-8-12 19:26 33190

[原创][分享]init_array原理简单说明

2014-8-12 19:26
33190
收藏
免费 5
支持
分享
最新回复 (46)
雪    币: 1443
活跃值: (96)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
26
格式挺漂亮的
2014-8-13 21:45
0
雪    币: 370
活跃值: (1176)
能力值: ( LV9,RANK:310 )
在线值:
发帖
回帖
粉丝
27
嗯,谢谢楼主分享! 以后在这方面多交流交流。
2014-8-13 23:27
0
雪    币: 250
活跃值: (251)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
28
自己编写过程中,只需要做如下申明便能将自己的函数加入到init_array段或者fini段中:
void my_init(void) __attribute__((constructor)); //告诉gcc把这个函数扔到init section  
void my_fini(void) __attribute__((destructor));  //告诉gcc把这个函数扔到fini section

其中my_init函数是人为定义的

楼主把其他的一起分享出来呗~
2014-8-14 09:51
0
雪    币: 18
活跃值: (430)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
29
其实我不大明白那个 转换公式
按照电子书来算 怎么算也不对
逆推才对 结果src地址推出得到4056A98
为什么src地址  加了一个40?
2014-8-15 18:26
0
雪    币: 188
活跃值: (167)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
30
那个只是针对B指令的。BX指令需要寄存器跳转,不能用这个公司。
2014-8-15 19:11
0
雪    币: 230
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
31
一语中的,楼主可能是想直接修改bin吧。
2014-8-19 13:22
0
雪    币: 70
活跃值: (74)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
32
看样子是一个完整文章的一部分啊。。LZ为什么不全共享出来
2014-8-19 16:53
0
雪    币: 188
活跃值: (167)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
33
其余的还不太方便公开。有机会发出来
2014-8-19 17:26
0
雪    币: 188
活跃值: (167)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
34
对,直接修改so或者bin
2014-8-19 17:27
0
雪    币: 233
活跃值: (148)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
35
虽然只是部分,还是学到了不少东西,谢谢分享。
2014-8-25 12:46
0
雪    币: 24
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
36
谢谢分享
2015-3-15 11:34
0
雪    币: 15
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
37
求 LZ把其它章节都共享出来,不共享今天晚上就不回家了!!
2015-9-8 17:24
0
雪    币: 188
活跃值: (167)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
38
回家了吗
2015-9-8 21:25
0
雪    币: 15
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
39
木有,还在公司
2015-10-26 14:27
0
雪    币: 341
活跃值: (138)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
40
啊。。放出来吧。。。求啊
2015-12-10 11:08
0
雪    币: 191
活跃值: (195)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
41
龙大大,这难道就是您提到的加密全部text的办法吗,然后在init_array作为解密函数的入口
2016-4-16 11:00
0
雪    币: 269
活跃值: (906)
能力值: ( LV12,RANK:345 )
在线值:
发帖
回帖
粉丝
42
理论上讲r12有可能会用到。
我习惯这么用
push {r0, r1}
ldr r0, data_disp_preinit
add r0, pc, r0
str r0, [sp,#4]
pop {r0, pc}
data_disp_preinit:
.word 0x56a99
2019-1-23 14:10
0
雪    币: 1135
活跃值: (2018)
能力值: ( LV5,RANK:75 )
在线值:
发帖
回帖
粉丝
43
AJISky 理论上讲r12有可能会用到。 我习惯这么用 push {r0, r1} ldr r0, data_disp_preinit add r0, pc, r0 str r0, [sp,#4] p ...
牛逼,专家就是不一样
2019-1-23 17:37
0
雪    币: 1135
活跃值: (2018)
能力值: ( LV5,RANK:75 )
在线值:
发帖
回帖
粉丝
44
  
最后于 2019-1-23 17:50 被茅山小僧编辑 ,原因:
2019-1-23 17:49
0
雪    币: 403
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
45
放出来吧
2019-1-23 18:13
0
雪    币: 2689
活跃值: (1581)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
46
66666
2019-1-23 18:41
0
雪    币: 1395
活跃值: (526)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
47
刚好前几天看 Zircon 内核源码的时候也看到了这玩意

-------------------------------------------------------------

调用全局构造函数

extern void (*const __init_array_start[])();
extern void (*const __init_array_end[])();
static void call_constructors() {
    for (void (*const* a)() = __init_array_start; a != __init_array_end; a++)
        (*a)();
}
函数上打了 attribute ((constructor)) 则为全局构造函数,编译器将其编译到 .init 段
而 __init_array_start 和 __init_array_end 是该段的开始和结尾

https://blog.csdn.net/ganyao939543405/article/details/86220466
2019-1-28 10:30
0
游客
登录 | 注册 方可回帖
返回
//