diff --git a/src/main.rs b/src/main.rs index e0b4519..25f9f80 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,7 @@ mod child; mod debug_target; mod syscall_info; +mod syscall_names; use crate::debug_target::{DebugTarget, Stopped}; use color_eyre::eyre::eyre; @@ -29,6 +30,22 @@ fn single_step_all(mut target: DebugTarget) -> color_eyre::Result<()> { } } +#[allow(dead_code)] +fn strace(mut target: DebugTarget) -> color_eyre::Result<()> { + loop { + match target.cont_syscall()?.wait_for_something()? { + Either::Left(t) => { + println!("{:?}", t.get_syscall_info()); + target = t; + } + Either::Right(exit_code) => { + println!("👋 Child exited with code {exit_code}"); + return Ok(()); + } + } + } +} + #[allow(dead_code)] fn breakpoint_fun(child_pid: Pid) -> color_eyre::Result<()> { println!("⏳️ Waiting for child to be ready"); @@ -83,7 +100,7 @@ fn breakpoint_fun(child_pid: Pid) -> color_eyre::Result<()> { fn main() -> color_eyre::Result<()> { color_eyre::install()?; - let child_exec_path = CString::new(env!("ASM_PROG_PATH"))?; + let child_exec_path = CString::new(env!("C_PROG_PATH"))?; match unsafe { fork() } { Ok(ForkResult::Child) => child::starti(child_exec_path), @@ -93,24 +110,25 @@ fn main() -> color_eyre::Result<()> { let target = DebugTarget::new(child_pid)?; println!("✔️ Child ready!"); - println!("🔎 rip: {:#x}", target.get_registers()?.rip); - - - println!("⚙️ Executing until next syscall"); - let target = target.cont_syscall()?.wait_for_syscall()?; - println!("{:?}", target.get_syscall_info()?); - let target = target.cont_syscall()?.wait_for_syscall()?; - println!("{:?}", target.get_syscall_info()?); - println!("🔎 rip: {}", target.get_registers()?.rip); - - println!("⚙️ Continuing execution"); - let exit_code = target.cont()?.wait_for_exit()?; - println!("👋 Child exited with code {exit_code}"); - - Ok(()) + // println!("🔎 rip: {:#x}", target.get_registers()?.rip); + // + // + // println!("⚙️ Executing until next syscall"); + // let target = target.cont_syscall()?.wait_for_syscall()?; + // println!("{:?}", target.get_syscall_info()?); + // let target = target.cont_syscall()?.wait_for_syscall()?; + // println!("{:?}", target.get_syscall_info()?); + // println!("🔎 rip: {}", target.get_registers()?.rip); + // + // println!("⚙️ Continuing execution"); + // let exit_code = target.cont()?.wait_for_exit()?; + // println!("👋 Child exited with code {exit_code}"); + // + // Ok(()) // single_step_all(target) + strace(target) // breakpoint_fun(child_pid) } Err(e) => {