paxtest里面对于main的测试可以反映这一点:
Main executable randomisation (ET_EXEC) : No randomisation
Main executable randomisation (PIE) : 27 quality bits (guessed)
-------------------------------------------------------------------------------
--------------------------------------------------------------------------------
对于start_code的位置,我们来看load_elf_binary,
其实start_code的位置取决于程序是可执行程序,还是动态共享的程序,这一点与heap类似。
如和heap中所述:
/* PAX_DELTA_MMAP_LEN=27, load_bias 的bit12~38为随机产生 */
load_bias = (pax_get_random_long() & ((1UL << PAX_DELTA_MMAP_LEN) - 1)) << PAGE_SHIFT;
loc->elf_ex.e_entry += load_bias;
elf_bss += load_bias;
elf_brk += load_bias;
start_code += load_bias;
end_code += load_bias;
start_data += load_bias;
end_data += load_bias;
所以,当load_bias==0时, start_code不包含随机数
当load_bias!=0时, start_code包含随机数的位数为12~38bit,也就是说存在27bits的随机数。
阅读(678) | 评论(0) | 转发(0) |