2 use std
::{env, fs, process}
;
5 let mut args
= env
::args().skip(1);
8 "Usage: {} <file> [address] ...",
9 env
::args().next().unwrap()
14 let file_path
= args
.next().unwrap();
15 let file
= match fs
::File
::open(&file_path
) {
18 println
!("Failed to open file '{}': {}", file_path
, err
,);
22 let file
= match unsafe { memmap2::Mmap::map(&file) }
{
25 println
!("Failed to map file '{}': {}", file_path
, err
,);
29 let file
= match object
::File
::parse(&*file
) {
32 println
!("Failed to parse file '{}': {}", file_path
, err
);
37 let map
= file
.object_map();
40 for symbol
in map
.symbols() {
41 print_symbol(symbol
, &map
);
45 let mut arg
= &arg
[..];
46 if arg
.starts_with("0x") {
49 let address
= u64::from_str_radix(arg
, 16).expect("Failed to parse address");
50 if let Some(symbol
) = map
.get(address
) {
51 print_symbol(symbol
, &map
);
53 println
!("{:} not found", address
);
59 fn print_symbol(symbol
: &object
::ObjectMapEntry
<'_
>, map
: &object
::ObjectMap
<'_
>) {
64 String
::from_utf8_lossy(symbol
.name()),
65 String
::from_utf8_lossy(symbol
.object(map
)),