INNER CODE UNIT · Rust
kernel_symbols_iter
KernelSU-Next/KernelSU-Next · userspace/ksuinit/src/lib.rs:42
pub fn kernel_symbols_iter() -> Result<impl Iterator<Item = (String, u64)>> {
let kptr = Kptr::new()?;
let iter = BufReader::new(File::open("/proc/kallsyms")?)
.lines()
// https://github.com/torvalds/linux/blob/7f87a5ea75f011d2c9bc8ac0167e5e2d1adb1594/kernel/kallsyms.c#L727
// We can stop read as soon as we read all kernel symbols
.map_while(|line| {
line.ok().and_then(|line| {
let mut splits = line.split_whitespace();
splits
.next()
.and_then(|addr| u64::from_str_radix(addr, 16).ok())
.and_then(|addr| {
splits
.nth(1)
.take_if(|_| splits.next().is_none()) // stop at module symbols
.map(|symbol| {