开启ASLR后,libc.so.6中函数的调用地址间距是否保持不变?
ASLR开启时libc函数地址间距的问题
- 结论:开启ASLR后,同一进程内libc中函数的地址间距始终保持固定
- 原因:ASLR的作用是给整个libc库(以及其他共享库)在进程虚拟地址空间分配随机基地址,但库内部所有函数、变量的相对偏移完全不变。也就是说,libc被加载时只是整体偏移一个随机基地址,内部各个符号的相对位置不会改变。
- 举例验证:
setvbuf 0017a3f0
system 0014f760
二者的固定间距为0x2ac90,开启ASLR后,假设libc基地址被随机偏移0x12300000,那么setvbuf实际地址会变成0x12300000 + 0x17a3f0,system实际地址会变成0x12300000 + 0x14f760,二者间距依然是(0x12300000 + 0x17a3f0) - (0x12300000 + 0x14f760) = 0x2ac90,和原间距完全一致。
内容的提问来源于stack exchange,提问作者rdre8
相关产品推荐
相关产品推荐

