Use argument results to decide whether or not to read stack_argument.

pull/773/head
pdliyan 2 years ago
parent 21f63e052f
commit b8c43a05dc

@ -12,14 +12,30 @@ static ARGS: HashMap<u32, u64> = HashMap::with_max_entries(24, 0);
#[uprobe]
pub fn test_stack_argument(ctx: ProbeContext) -> i32 {
match try_stack_argument(ctx) {
Ok(ret) => ret,
Err(_) => 0,
}
try_stack_argument(ctx).unwrap_or(0)
}
// read function arguments, and set to map.
fn try_stack_argument(ctx: ProbeContext) -> Result<i32, i64> {
let mut stack = false;
let mut arg = 0;
loop {
if arg > 7 {
break;
}
if stack {
let _ = ARGS.insert(&arg, &ctx.arg(arg as usize).ok_or(255)?, 0);
} else {
let arg_v: Option<u64> = ctx.arg(arg as usize);
if let None = arg_v {
// assume that we shall read from stack now.
stack = true;
continue;
}
let _ = ARGS.insert(&arg, &arg_v.unwrap(), 0);
}
arg += 1;
}
let _ = ARGS.insert(&0, &ctx.arg(0).ok_or(255)?, 0);
let _ = ARGS.insert(&1, &ctx.arg(1).ok_or(255)?, 0);
let _ = ARGS.insert(&2, &ctx.arg(2).ok_or(255)?, 0);

Loading…
Cancel
Save