Changing a register value

This commit is contained in:
Elnath 2025-04-18 19:27:55 +02:00
parent fa83367ebf
commit cd8ae69d7f
1 changed files with 13 additions and 4 deletions

View File

@ -1,10 +1,10 @@
mod child; mod child;
use nix::libc::user_regs_struct;
use nix::sys::ptrace::*; use nix::sys::ptrace::*;
use nix::sys::wait::waitpid; use nix::sys::wait::waitpid;
use nix::unistd::{ForkResult, fork}; use nix::unistd::{fork, ForkResult};
use std::ffi::CString; use std::ffi::CString;
use std::io;
use std::process::ExitCode; use std::process::ExitCode;
fn main() -> ExitCode { fn main() -> ExitCode {
@ -38,8 +38,17 @@ fn main() -> ExitCode {
}, },
Stopped(_pid, _signal) => { Stopped(_pid, _signal) => {
let regs = getregs(child_pid).unwrap(); let regs = getregs(child_pid).unwrap();
println!("🔎 [{}] rip= 0x{:016X}, rax = 0x{rax:X} ({rax})", before_instruction, regs.rip, rax = regs.rax); println!(
io::stdin().read_line(&mut String::new()).unwrap(); "🔎 [{}] rip= 0x{:016X}, rax = 0x{rax:X} ({rax})",
before_instruction,
regs.rip,
rax = regs.rax
);
if regs.rax == 60 {
println!("Let's change a register!");
let new_regs = user_regs_struct { rdi: 54, ..regs };
setregs(child_pid, new_regs).unwrap();
}
before_instruction += 1; before_instruction += 1;
step(child_pid, None).unwrap(); step(child_pid, None).unwrap();
} }