@@ -21,38 +21,30 @@ pub unsafe fn lookup_kallsyms(addr: u64, level: i32) -> bool {
2121 let sym_num = kallsyms_num as usize ;
2222 let kallsyms_address_list =
2323 core:: slice:: from_raw_parts ( kallsyms_address as * const u64 , sym_num) ;
24+ let mut is_kernel_main = false ;
25+ if addr < kallsyms_address_list[ 0 ] || addr > kallsyms_address_list[ sym_num - 1 ] {
26+ println ! ( "[{}] function:unknown \t address:{:#018x}" , level, addr) ;
27+ return is_kernel_main;
28+ }
2429 let sym_names_index = kallsyms_names_index as * const u64 ;
2530 let sym_names_index = core:: slice:: from_raw_parts ( sym_names_index, sym_num) ;
26- let mut index = usize:: MAX ;
27- for i in 0 ..sym_num - 1 {
28- if addr > kallsyms_address_list[ i] && addr <= kallsyms_address_list[ i + 1 ] {
29- index = i;
30- break ;
31- }
32- }
33- let mut is_kernel_main = false ;
34- if index < sym_num {
35- let sym_name = CStr :: from_ptr ( sym_names. add ( sym_names_index[ index] as usize ) as _ )
36- . to_str ( )
37- . unwrap ( ) ;
38- if sym_name. starts_with ( "kernel_main" ) {
39- is_kernel_main = true ;
40- }
41- println ! (
42- "[{}] function:{}() \t (+) {:04} address:{:#018x}" ,
43- level,
44- sym_name,
45- addr - kallsyms_address_list[ index] ,
46- addr
47- ) ;
48- } else {
49- println ! (
50- "[{}] function:unknown \t (+) {:04} address:{:#018x}" ,
51- level,
52- addr - kallsyms_address_list[ sym_num - 1 ] ,
53- addr
54- ) ;
31+ let index = match kallsyms_address_list. binary_search ( & addr) {
32+ Ok ( i) => i,
33+ Err ( i) => i - 1 ,
5534 } ;
35+ let sym_name = CStr :: from_ptr ( sym_names. add ( sym_names_index[ index] as usize ) as _ )
36+ . to_str ( )
37+ . unwrap ( ) ;
38+ if sym_name. starts_with ( "kernel_main" ) {
39+ is_kernel_main = true ;
40+ }
41+ println ! (
42+ "[{}] function:{}() \t (+) {:04} address:{:#018x}" ,
43+ level,
44+ sym_name,
45+ addr - kallsyms_address_list[ index] ,
46+ addr
47+ ) ;
5648 return is_kernel_main;
5749}
5850
0 commit comments