(vm: &mut Vm, addr: u64, data_reg: &str, len_reg: &str)
| 577 | } |
| 578 | |
| 579 | fn register_write_printer(vm: &mut Vm, addr: u64, data_reg: &str, len_reg: &str) { |
| 580 | tracing::debug!("registering `write(data={data_reg}, len={len_reg})` hook at {addr:#x}"); |
| 581 | let data = vm.cpu.arch.sleigh.get_varnode(data_reg).unwrap(); |
| 582 | let len = vm.cpu.arch.sleigh.get_varnode(len_reg).unwrap(); |
| 583 | |
| 584 | let mut buf = vec![]; |
| 585 | vm.hook_address(addr, move |cpu: &mut icicle_vm::cpu::Cpu, _| { |
| 586 | let ptr = cpu.read_var::<u32>(data); |
| 587 | let len = cpu.read_var::<u32>(len); |
| 588 | buf.resize((len as usize).min(64), 0); |
| 589 | let _ = cpu.mem.read_bytes(ptr as u64, &mut buf, perm::NONE); |
| 590 | print!("{}", buf.as_bstr()); |
| 591 | let _ = std::io::stdout().flush(); |
| 592 | }); |
| 593 | } |
no outgoing calls
no test coverage detected