首页
社区
课程
招聘
[讨论]关于函数入口地址对齐问题
发表于: 2016-4-18 21:53 3974

[讨论]关于函数入口地址对齐问题

2016-4-18 21:53
3974
在二进制代码段中,很多函数之间为了对齐处理填充了空值令。
然而,并不是所有的函数都要求入口地址对齐(偶数对齐或者字对齐),但是也有些函数确实需要对齐,这类函数在调用之前,会有部分指令进行函数入口地址对齐判断。
但是,如何区分 一个二进制中 需要对齐的函数 和不需要对齐的函数呢?(自动化)
求教。谢谢!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 207
活跃值: (26)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
好像没有看到函数的入口地址要对齐这一说~~
2016-4-19 00:05
0
雪    币: 267
活跃值: (438)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
3
有没有对齐,对齐粒度是多少,这是由编译链接器决定的,结果是由连接器最终生成的,当然不排除有预链接就可以知道结果。
2016-4-19 08:44
0
雪    币: 14
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
确实没有严格的函数入口地址对齐的要求,
但是有些指令,比如:
mov rax, addr_func
test al,1
jz loc_1
...
非对齐处理
...
loc_1:
jmp rax
这种需要对齐处理的函数,一般通过分析汇编可以找到,但不知道能不能通过解析二进制的结构来找到这类函数。。。。比如,函数对齐的flag...?
2016-4-19 21:29
0
雪    币: 207
活跃值: (26)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
你说的应该是指令对齐吧,跟函数入口没有关系,在任何一个地方都有可能会发生,指令的解析有两种,一种是线性解析也就是IDA所用的,另一种就是递归解析,当遇到一个跳转指令,并非进入到线性指令的入口时会发生重新解析的现象。这个在编译好的DLL里面一般不会发生的~
一般双字要求四个字节对齐,字要求两个字节对齐
2016-4-20 21:10
0
雪    币: 207
活跃值: (26)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
6
比如一个PE入口点为0x00400000 可以正确执行,但是改为0x004000001就会乱成一团,跟函数入口点没关系
2016-4-20 21:12
0
游客
登录 | 注册 方可回帖
返回
//