This commit is contained in:
yunwei37
2024-10-03 03:31:55 +00:00
parent 252625d27c
commit 6f7bc37a6a
353 changed files with 165801 additions and 0 deletions

View File

@@ -0,0 +1,44 @@
extern crate blazesym;
use blazesym::{BlazeSymbolizer, SymbolSrcCfg};
use std::env;
use std::path;
fn show_usage() {
let args: Vec<String> = env::args().collect();
println!("Usage: {} <file> <address>", args[0]);
}
fn main() {
let args: Vec<String> = env::args().collect();
if args.len() != 3 {
show_usage();
return;
}
let bin_name = &args[1];
let mut addr_str = &args[2][..];
let sym_srcs = [SymbolSrcCfg::Elf {
file_name: path::PathBuf::from(bin_name),
base_address: 0x0,
}];
let resolver = BlazeSymbolizer::new().unwrap();
if &addr_str[0..2] == "0x" {
// Remove prefixed 0x
addr_str = &addr_str[2..];
}
let addr = u64::from_str_radix(addr_str, 16).unwrap();
let results = resolver.symbolize(&sym_srcs, &[addr]);
if results.len() == 1 && !results[0].is_empty() {
let result = &results[0][0];
println!(
"0x{:x} @ {} {}:{}",
addr, result.symbol, result.path, result.line_no
);
} else {
println!("0x{addr:x} is not found");
}
}

View File

@@ -0,0 +1,54 @@
extern crate blazesym;
use blazesym::{BlazeSymbolizer, SymbolSrcCfg, SymbolizedResult};
use std::env;
fn show_usage() {
let args: Vec<String> = env::args().collect();
println!("Usage: {} <pid> <address>", args[0]);
println!("Resolve an address in the process of the given pid, and");
println!("print its symbol, the file name of the source, and the line number.");
}
fn main() {
let args: Vec<String> = env::args().collect();
if args.len() != 3 {
show_usage();
return;
}
let pid = args[1].parse::<u32>().unwrap();
let mut addr_str = &args[2][..];
println!("PID: {pid}");
if addr_str.len() > 2 && &addr_str[0..2] == "0x" {
// Remove prefixed 0x
addr_str = &addr_str[2..];
}
let addr = u64::from_str_radix(addr_str, 16).unwrap();
let sym_files = [SymbolSrcCfg::Process { pid: Some(pid) }];
let resolver = BlazeSymbolizer::new().unwrap();
let symlist = resolver.symbolize(&sym_files, &[addr]);
if !symlist[0].is_empty() {
let SymbolizedResult {
symbol,
start_address,
path,
line_no,
column: _,
} = &symlist[0][0];
println!(
"0x{:x} {}@0x{:x}+{} {}:{}",
addr,
symbol,
start_address,
addr - start_address,
path,
line_no
);
} else {
println!("0x{addr:x} is not found");
}
}