@@ -21,38 +21,31 @@ 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 ( 0 ) => sym_num, // 地址小于第一个符号
34+ Err ( i) => i - 1 ,
5535 } ;
36+ let sym_name = CStr :: from_ptr ( sym_names. add ( sym_names_index[ index] as usize ) as _ )
37+ . to_str ( )
38+ . unwrap ( ) ;
39+ if sym_name. starts_with ( "kernel_main" ) {
40+ is_kernel_main = true ;
41+ }
42+ println ! (
43+ "[{}] function:{}() \t (+) {:04} address:{:#018x}" ,
44+ level,
45+ sym_name,
46+ addr - kallsyms_address_list[ index] ,
47+ addr
48+ ) ;
5649 return is_kernel_main;
5750}
5851
0 commit comments