arm32的Linux中KASLR的实现在哪些函数中
时间: 2024-02-16 09:02:13 浏览: 30
在arm32的Linux中,KASLR(内核地址空间布局随机化)的实现主要涉及以下函数:
1. `mem_init()`:该函数在内核启动时被调用,用于初始化物理内存管理。在KASLR启用时,该函数会调用`kasan_init()`函数,用于初始化内核地址空间布局随机化。
2. `kasan_init()`:该函数用于初始化内核地址空间布局随机化。在KASLR启用时,该函数会调用`kasan_randomize_kva()`函数,用于随机化内核虚拟地址空间的布局。
3. `kasan_randomize_kva()`:该函数用于随机化内核虚拟地址空间的布局。该函数会计算出内核虚拟地址空间随机化的偏移量,并将内核的代码、数据和堆栈等部分随机化。
4. `kasan_populate_early_shadow()`:该函数用于在内核启动早期(在调用`mem_init()`之前)填充内存阴影映射表。在KASLR启用时,该函数会将内核虚拟地址空间随机化后的映射与内存阴影映射表关联起来。
5. `kasan_populate_shadow()`:该函数用于在内核启动后动态填充内存阴影映射表。在KASLR启用时,该函数会在内存映射改变时更新内存阴影映射表。
总之,在arm32的Linux中,KASLR的实现涉及多个函数,这些函数之间相互协作,完成内核地址空间布局随机化的任务。
相关问题
arm32的Linux中KASLR的实现在哪些函数中,它们在哪些文件
在arm32的Linux中,KASLR的实现涉及的函数主要在以下文件中:
1. `init/main.c`:该文件中的`start_kernel()`函数是内核的启动函数,在该函数中会调用`mem_init()`函数,用于初始化物理内存管理。在KASLR启用时,该函数会调用`kasan_init()`函数,用于初始化内核地址空间布局随机化。
2. `mm/kasan/kasan_init.c`:该文件中的`kasan_init()`函数用于初始化内核地址空间布局随机化。在KASLR启用时,该函数会调用`kasan_randomize_kva()`函数,用于随机化内核虚拟地址空间的布局。
3. `mm/kasan/kasan.c`:该文件中的`kasan_randomize_kva()`函数用于随机化内核虚拟地址空间的布局。该函数会计算出内核虚拟地址空间随机化的偏移量,并将内核的代码、数据和堆栈等部分随机化。该文件中还包含`kasan_populate_early_shadow()`和`kasan_populate_shadow()`函数,用于填充内存阴影映射表。
因此,要了解arm32的Linux中KASLR的实现,需要查看以上文件中的函数。
arm32的linux中初始化内核地址的函数
在ARM32的Linux中,初始化内核地址的函数是`start_kernel()`,定义在`init/main.c`文件中。在该函数中,会调用`setup_arch()`函数进行体系结构相关的初始化工作,其中包括初始化内核的虚拟地址空间并建立内核页表。
`start_kernel()`函数的部分代码如下:
```c
asmlinkage void __init start_kernel(void)
{
// ...
/* setup_arch() performs the bulk of the architectural setup */
setup_arch(&command_line);
// ...
}
```
`setup_arch()`函数的部分代码如下:
```c
void __init setup_arch(char **cmdline_p)
{
// ...
/* Set up the kernel virtual memory mapping */
paging_init();
setup_mm_for_reboot(three_level_pgd);
// ...
}
```
`paging_init()`函数用于初始化内核页表,其中会调用`prepare_page_table()`函数生成内核的二级页表并建立映射关系。`setup_mm_for_reboot()`函数用于设置内核的内存管理上下文,并将一级页表的地址设置为`three_level_pgd`。
因此,可以说是在`start_kernel()`函数中调用了`setup_arch()`函数来初始化内核地址,并在其中调用了`paging_init()`函数建立内核页表。