0

我正在通过学​​习源码研究Android动态库的加载过程。在/bionic/linker/linker.cpp中,我发现获取动态库及其依赖库的信息后,将它们放入“load_list”,然后调用“shuffle”函数对其进行随机化,然后加载库在“加载列表”中。我想知道随机化的目的是什么。

我研究的Android版本是8.0.0_r4,随机操作是2015年10月以后加入的,之前的版本没有。

1498static void shuffle(std::vector<LoadTask*>* v) {
1499  for (size_t i = 0, size = v->size(); i < size; ++i) {
1500    size_t n = size - i;
1501    size_t r = arc4random_uniform(n);
1502    std::swap((*v)[n-1], (*v)[r]);
1503  }
1504}


1615  shuffle(&load_list);
1616
1617  for (auto&& task : load_list) {
1618    if (!task->load()) {
1619      return false;
1620    }
1621  }
4

0 回答 0