mirror of
https://github.com/eunomia-bpf/bpf-developer-tutorial.git
synced 2026-02-10 21:55:12 +08:00
Deploying to gh-pages from @ eunomia-bpf/bpf-developer-tutorial@ab0d1eef08 🚀
This commit is contained in:
44
third_party/blazesym/examples/addr2ln.rs
vendored
Normal file
44
third_party/blazesym/examples/addr2ln.rs
vendored
Normal 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");
|
||||
}
|
||||
}
|
||||
54
third_party/blazesym/examples/addr2ln_pid.rs
vendored
Normal file
54
third_party/blazesym/examples/addr2ln_pid.rs
vendored
Normal 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");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user