Compare commits
2 Commits
cf524608a1
...
3454bc9bc2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3454bc9bc2 | ||
|
|
f5f95e4714 |
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
target/
|
||||
@@ -7,4 +7,5 @@ pub use processes::read_memory_vm;
|
||||
pub use processes::write_memory_vm;
|
||||
pub use processes::write_memory_ptrace;
|
||||
pub use map::first_rw_segment;
|
||||
pub use map::module_base_address;
|
||||
pub use map::module_base_address;
|
||||
pub use map::first_exec_segment;
|
||||
@@ -46,6 +46,23 @@ pub fn first_rw_segment(range_strings: &Vec<&str>) -> Option<(u64, u64)> {
|
||||
None
|
||||
}
|
||||
|
||||
pub fn first_exec_segment(range_strings: &Vec<&str>) -> Option<(u64, u64)> {
|
||||
for range_str in range_strings {
|
||||
let parts: Vec<&str> = range_str.split_whitespace().collect();
|
||||
if parts.len() < 2 {
|
||||
continue;
|
||||
}
|
||||
|
||||
let perms = parts[1];
|
||||
if perms.contains('x') {
|
||||
if let Some((start, end)) = parse_address_range(range_str) {
|
||||
return Some((start, end));
|
||||
}
|
||||
}
|
||||
}
|
||||
None
|
||||
}
|
||||
|
||||
pub fn module_base_address(range_strings: &Vec<&str>, module_name: &str) -> Option<u64> {
|
||||
let mut base_addr: Option<u64> = None;
|
||||
|
||||
|
||||
@@ -1,26 +1,29 @@
|
||||
|
||||
#![allow(unused_imports)]
|
||||
|
||||
mod helper;
|
||||
|
||||
use std::arch::asm;
|
||||
use std::ffi::CString;
|
||||
use nix::sys::ptrace;
|
||||
use nix::sys::wait::waitpid;
|
||||
use nix::unistd::Pid;
|
||||
use std::arch::asm;
|
||||
use std::ffi::CString;
|
||||
|
||||
use helper::*;
|
||||
use iced_x86::code_asm::asm_traits::CodeAsmJmp;
|
||||
use iced_x86::{Instruction, code_asm::*};
|
||||
use libc::user_regs_struct;
|
||||
use libc::{RTLD_NEXT, c_void, dlsym};
|
||||
use std::fs;
|
||||
use std::io::BufRead;
|
||||
use helper::*;
|
||||
use iced_x86::{code_asm::*, Instruction};
|
||||
use iced_x86::code_asm::asm_traits::CodeAsmJmp;
|
||||
use libc::{user_regs_struct};
|
||||
use libc::{c_void, dlsym, RTLD_NEXT};
|
||||
|
||||
const GREEN: &str = "\x1b[32m";
|
||||
const RESET: &str = "\x1b[0m";
|
||||
|
||||
fn inject1(pid: Pid, seg_rw: (u64, u64), regs: user_regs_struct) -> Result<(), Box<dyn std::error::Error>> // Simple injection
|
||||
fn inject1(
|
||||
pid: Pid,
|
||||
seg_rw: (u64, u64),
|
||||
regs: user_regs_struct,
|
||||
) -> Result<(), Box<dyn std::error::Error>> // Simple injection
|
||||
{
|
||||
let injected_data = "You are injected. \r\n";
|
||||
write_memory_vm(pid, seg_rw.0 as usize, &injected_data.as_bytes())?;
|
||||
@@ -31,9 +34,9 @@ fn inject1(pid: Pid, seg_rw: (u64, u64), regs: user_regs_struct) -> Result<(), B
|
||||
asm.mov(rdi, 1u64)?; // Fd 1 (STDOUT)
|
||||
asm.mov(rsi, seg_rw.0)?; // Buffer pointer (Here is rw segment in target)
|
||||
asm.mov(rdx, injected_data.as_bytes().len() as u64)?; // Buffer length
|
||||
asm.syscall()?; // Syscall interrupt
|
||||
asm.syscall()?; // Syscall interrupt
|
||||
|
||||
asm.int3()?; // (Important!!!) Use int3 interrupt to retrieve control flow
|
||||
asm.int3()?; // (Important!!!) Use int3 interrupt to retrieve control flow
|
||||
|
||||
let injected_inst = asm.assemble(regs.rip as u64)?;
|
||||
write_memory_ptrace(pid, regs.rip as usize, &injected_inst)?;
|
||||
@@ -45,10 +48,16 @@ fn inject1(pid: Pid, seg_rw: (u64, u64), regs: user_regs_struct) -> Result<(), B
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn inject2(pid: Pid, seg_rw: (u64, u64), regs: user_regs_struct) -> Result<(), Box<dyn std::error::Error>> // ld injection
|
||||
fn inject2(
|
||||
pid: Pid,
|
||||
seg_rw: (u64, u64),
|
||||
regs: user_regs_struct,
|
||||
) -> Result<(), Box<dyn std::error::Error>> // ld injection
|
||||
{
|
||||
// Get the absolute path to our shared library
|
||||
let lib_path = fs::canonicalize("./target/debug/libproject_hbj_attacker.so")?.to_string_lossy().into_owned();
|
||||
let lib_path = fs::canonicalize("./target/debug/libproject_hbj_attacker.so")?
|
||||
.to_string_lossy()
|
||||
.into_owned();
|
||||
let cpid = nix::unistd::getpid().to_string();
|
||||
|
||||
// Read our own process memory maps to find libc base address
|
||||
@@ -57,49 +66,72 @@ fn inject2(pid: Pid, seg_rw: (u64, u64), regs: user_regs_struct) -> Result<(), B
|
||||
let mut dlopen_offset: u64 = 0;
|
||||
|
||||
// Find libc base address in our own process
|
||||
let Some(libc_base_local) = module_base_address(&self_map_lines, "libc.so") else
|
||||
{ return Err(Box::new(std::io::Error::new(std::io::ErrorKind::Other, "libc not found"))); };
|
||||
let Some(libc_base_local) = module_base_address(&self_map_lines, "libc.so") else {
|
||||
return Err(Box::new(std::io::Error::new(
|
||||
std::io::ErrorKind::Other,
|
||||
"libc not found",
|
||||
)));
|
||||
};
|
||||
|
||||
println!("{GREEN}[local]{RESET} libc base: {:#016x}", libc_base_local);
|
||||
|
||||
// Use dlsym to get the address of dlopen in our own process
|
||||
unsafe{
|
||||
unsafe {
|
||||
let dlopen_addr_local = dlsym(RTLD_NEXT, b"dlopen\0".as_ptr() as *const _);
|
||||
// Calculate offset of dlopen from libc base in our process
|
||||
dlopen_offset = dlopen_addr_local as u64 - libc_base_local;
|
||||
}
|
||||
|
||||
println!("{GREEN}[local]{RESET} dlopen offset = {:#016x}", dlopen_offset);
|
||||
println!(
|
||||
"{GREEN}[local]{RESET} dlopen offset = {:#016x}",
|
||||
dlopen_offset
|
||||
);
|
||||
|
||||
// Read target process memory maps to find its libc base address
|
||||
let target_maps = fs::read_to_string(format!("/proc/{}/maps", pid))?;
|
||||
let target_map_lines = target_maps.lines().collect::<Vec<&str>>();
|
||||
|
||||
// Find libc base address in target process
|
||||
let Some(libc_base_target) = module_base_address(&target_map_lines, "libc.so") else
|
||||
{ return Err(Box::new(std::io::Error::new(std::io::ErrorKind::Other, "libc not found"))); };
|
||||
let Some(libc_base_target) = module_base_address(&target_map_lines, "libc.so") else {
|
||||
return Err(Box::new(std::io::Error::new(
|
||||
std::io::ErrorKind::Other,
|
||||
"libc not found",
|
||||
)));
|
||||
};
|
||||
|
||||
println!("{GREEN}[trace]{RESET} libc base = {:#016x}", libc_base_target);
|
||||
println!(
|
||||
"{GREEN}[trace]{RESET} libc base = {:#016x}",
|
||||
libc_base_target
|
||||
);
|
||||
|
||||
// Calculate dlopen address in target process using the same offset
|
||||
let target_dlopen_addr = libc_base_target + dlopen_offset;
|
||||
println!("{GREEN}[trace]{RESET} dlopen address = {:#016x}", target_dlopen_addr);
|
||||
|
||||
println!(
|
||||
"{GREEN}[trace]{RESET} dlopen address = {:#016x}",
|
||||
target_dlopen_addr
|
||||
);
|
||||
|
||||
// Start Inject
|
||||
let c_lib_path = CString::new(lib_path).unwrap();
|
||||
write_memory_vm(pid, seg_rw.0 as usize, c_lib_path.as_bytes_with_nul())?;
|
||||
println!("{GREEN}[trace]{RESET} write {} to {:#016x}", &c_lib_path.to_string_lossy(), seg_rw.0);
|
||||
println!(
|
||||
"{GREEN}[trace]{RESET} write {} to {:#016x}",
|
||||
&c_lib_path.to_string_lossy(),
|
||||
seg_rw.0
|
||||
);
|
||||
|
||||
let mut asm = CodeAssembler::new(64)?;
|
||||
asm.mov(rdi, seg_rw.0)?; // Param 1: Filename
|
||||
asm.mov(rdi, seg_rw.0)?; // Param 1: Filename
|
||||
asm.mov(rsi, 2u64)?; // Param 2: Flag, 2(RTLD_NOW)
|
||||
asm.call(target_dlopen_addr)?; // Syscall interrupt
|
||||
asm.call(target_dlopen_addr)?; // Syscall interrupt
|
||||
|
||||
asm.int3()?; // (Important!!!) Use int3 interrupt to retrieve control flow
|
||||
asm.int3()?; // (Important!!!) Use int3 interrupt to retrieve control flow
|
||||
let injected_inst = asm.assemble(regs.rip as u64)?;
|
||||
write_memory_ptrace(pid, regs.rip as usize, &injected_inst)?;
|
||||
println!("{GREEN}[trace]{RESET} write instructions to {:#016x}", regs.rip);
|
||||
println!(
|
||||
"{GREEN}[trace]{RESET} write instructions to {:#016x}",
|
||||
regs.rip
|
||||
);
|
||||
|
||||
// Continue target
|
||||
ptrace::cont(pid, None)?;
|
||||
@@ -109,26 +141,36 @@ fn inject2(pid: Pid, seg_rw: (u64, u64), regs: user_regs_struct) -> Result<(), B
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn inject3(pid: Pid, seg_rw: (u64, u64), regs: user_regs_struct) -> Result<(), Box<dyn std::error::Error>> // thread inject
|
||||
fn inject3(
|
||||
pid: Pid,
|
||||
seg_rw: (u64, u64),
|
||||
regs: user_regs_struct,
|
||||
) -> Result<(), Box<dyn std::error::Error>> // thread inject
|
||||
{
|
||||
// Alloc rwx memory
|
||||
let mut asm = CodeAssembler::new(64)?;
|
||||
|
||||
asm.mov(rax, 9u64)?; // Syscall 9 (mmap)
|
||||
|
||||
asm.mov(rdi, 1u64)?; // Addr
|
||||
asm.mov(rsi, 4096u64)?; // Length, we alloc a page (4K)
|
||||
asm.mov(rdx, (libc::PROT_READ | libc::PROT_WRITE | libc::PROT_EXEC) as u64)?; // Set protect to rwx
|
||||
asm.mov(rdi, 1u64)?; // Addr
|
||||
asm.mov(rsi, 4096u64)?; // Length, we alloc a page (4K)
|
||||
asm.mov(
|
||||
rdx,
|
||||
(libc::PROT_READ | libc::PROT_WRITE | libc::PROT_EXEC) as u64,
|
||||
)?; // Set protect to rwx
|
||||
asm.mov(r10, (libc::MAP_SHARED | libc::MAP_ANONYMOUS) as u64)?; // Private and anonymous
|
||||
asm.mov(r8, 01i64)?; // Fd (-1 because we want anonymous)
|
||||
asm.mov(r9, 0u64)?; // Offset
|
||||
|
||||
asm.syscall()?; // Syscall interrupt
|
||||
asm.int3()?; // (Important!!!) Use int3 interrupt to retrieve control flow
|
||||
asm.syscall()?; // Syscall interrupt
|
||||
asm.int3()?; // (Important!!!) Use int3 interrupt to retrieve control flow
|
||||
|
||||
let injected_inst = asm.assemble(regs.rip as u64)?;
|
||||
write_memory_ptrace(pid, regs.rip as usize, &injected_inst)?;
|
||||
println!("{GREEN}[trace]{RESET} write instructions to {:#016x}", regs.rip);
|
||||
println!(
|
||||
"{GREEN}[trace]{RESET} write instructions to {:#016x}",
|
||||
regs.rip
|
||||
);
|
||||
|
||||
// Continue target
|
||||
ptrace::cont(pid, None)?;
|
||||
@@ -138,7 +180,10 @@ fn inject3(pid: Pid, seg_rw: (u64, u64), regs: user_regs_struct) -> Result<(), B
|
||||
|
||||
let regs_after_map = ptrace::getregs(pid)?;
|
||||
let page_addr = regs_after_map.rax as usize;
|
||||
println!("{GREEN}[trace]{RESET} allocated page is at {:#016x}", page_addr);
|
||||
println!(
|
||||
"{GREEN}[trace]{RESET} allocated page is at {:#016x}",
|
||||
page_addr
|
||||
);
|
||||
|
||||
let injected_data = "I am injected thread, I am running... \r\n";
|
||||
write_memory_vm(pid, page_addr + 0x500, &injected_data.as_bytes())?;
|
||||
@@ -154,14 +199,14 @@ fn inject3(pid: Pid, seg_rw: (u64, u64), regs: user_regs_struct) -> Result<(), B
|
||||
asm.mov(rdi, 1u64)?; // Fd 1 (STDOUT)
|
||||
asm.mov(rsi, (page_addr + 0x500) as u64)?; // Buffer pointer (Here is page_addr + 0x500)
|
||||
asm.mov(rdx, injected_data.as_bytes().len() as u64)?; // Buffer length
|
||||
asm.syscall()?; // Syscall interrupt
|
||||
asm.syscall()?; // Syscall interrupt
|
||||
|
||||
asm.mov(rax, 35u64)?; // Syscall 35 (nano sleep)
|
||||
asm.mov(rdi, (page_addr + 0x600) as u64)?; // Req
|
||||
asm.mov(rsi, 0u64)?; //Rem
|
||||
asm.syscall()?; // Syscall interrupt
|
||||
asm.syscall()?; // Syscall interrupt
|
||||
|
||||
asm.jmp(target_label)?; // Jmp back to loop
|
||||
asm.jmp(target_label)?; // Jmp back to loop
|
||||
|
||||
let injected_payload = asm.assemble(page_addr as u64)?;
|
||||
write_memory_vm(pid, page_addr, &injected_payload)?;
|
||||
@@ -174,18 +219,25 @@ fn inject3(pid: Pid, seg_rw: (u64, u64), regs: user_regs_struct) -> Result<(), B
|
||||
|
||||
asm.mov(rax, 56u64)?; // Syscall 56 (clone)
|
||||
|
||||
asm.mov(rdi, (libc::CLONE_VM | libc::CLONE_FS | libc::CLONE_FILES | libc::CLONE_SIGHAND | libc::CLONE_THREAD) as u64)?; // Flags
|
||||
asm.mov(
|
||||
rdi,
|
||||
(libc::CLONE_VM
|
||||
| libc::CLONE_FS
|
||||
| libc::CLONE_FILES
|
||||
| libc::CLONE_SIGHAND
|
||||
| libc::CLONE_THREAD) as u64,
|
||||
)?; // Flags
|
||||
asm.mov(rsi, (page_addr + 0x800) as u64)?; // Stack top
|
||||
|
||||
asm.mov(rdx, 0u64)?; // parent_tid = NULL
|
||||
asm.mov(r10, 0u64)?; // child_tid = NULL
|
||||
asm.mov(r8, 0u64)?; // tls = NULL
|
||||
asm.mov(r8, 0u64)?; // tls = NULL
|
||||
|
||||
asm.syscall()?; // Syscall interrupt
|
||||
asm.test(eax, eax)?; // Syscall returns zero?
|
||||
asm.syscall()?; // Syscall interrupt
|
||||
asm.test(eax, eax)?; // Syscall returns zero?
|
||||
asm.jz(page_addr as u64)?;
|
||||
|
||||
asm.int3()?; // (Important!!!) Use int3 interrupt to retrieve control flow
|
||||
asm.int3()?; // (Important!!!) Use int3 interrupt to retrieve control flow
|
||||
|
||||
let injected_trigger = asm.assemble(regs.rip as u64)?;
|
||||
write_memory_ptrace(pid, regs.rip as usize, &injected_trigger)?;
|
||||
@@ -198,12 +250,13 @@ fn inject3(pid: Pid, seg_rw: (u64, u64), regs: user_regs_struct) -> Result<(), B
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
|
||||
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
// Find our target program
|
||||
let pid = Pid::from_raw(get_pid_by_name("target")?);
|
||||
|
||||
let target = fs::read_link(format!("/proc/{}/exe", pid))?.to_string_lossy().into_owned();
|
||||
let target = fs::read_link(format!("/proc/{}/exe", pid))?
|
||||
.to_string_lossy()
|
||||
.into_owned();
|
||||
let content = fs::read_to_string(format!("/proc/{}/maps", pid))?;
|
||||
let lines: Vec<&str> = content
|
||||
.lines()
|
||||
@@ -214,38 +267,70 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
println!("{GREEN}[memory map]{RESET} {}", line);
|
||||
}
|
||||
|
||||
let Some(seg_rw) = first_rw_segment(&lines) else { return Err(Box::new(std::io::Error::new(std::io::ErrorKind::Other, "first rw segment not found"))); };
|
||||
let Some(seg_rw) = first_rw_segment(&lines) else {
|
||||
return Err(Box::new(std::io::Error::new(
|
||||
std::io::ErrorKind::Other,
|
||||
"first rw segment not found",
|
||||
)));
|
||||
};
|
||||
|
||||
let Some(seg_x) = first_exec_segment(&lines) else {
|
||||
return Err(Box::new(std::io::Error::new(
|
||||
std::io::ErrorKind::Other,
|
||||
"first exec segment not found",
|
||||
)));
|
||||
};
|
||||
|
||||
ptrace::attach(pid)?;
|
||||
waitpid(pid, None)?;
|
||||
ptrace::step(pid, None)?;
|
||||
waitpid(pid, None)?;
|
||||
|
||||
loop{
|
||||
// Single-stepping, so that RIP returns to the user space of the process itself,
|
||||
// rather than in some other library
|
||||
let regs = ptrace::getregs(pid)?;
|
||||
if is_address_in_range(regs.rip, &lines)
|
||||
{
|
||||
println!("{GREEN}[trace]{RESET} Address: {:#x}", regs.rip);
|
||||
break;
|
||||
}
|
||||
ptrace::step(pid, None)?;
|
||||
waitpid(pid, None)?;
|
||||
}
|
||||
// ↓ Old behavior, but maybe the process stay in their libraries forever ?
|
||||
|
||||
// loop{
|
||||
// // Single-stepping, so that RIP returns to the user space of the process itself,
|
||||
// // rather than in some other library
|
||||
// let regs = ptrace::getregs(pid)?;
|
||||
// if is_address_in_range(regs.rip, &lines)
|
||||
// {
|
||||
// println!("{GREEN}[trace]{RESET} Address: {:#016x}", regs.rip);
|
||||
// break;
|
||||
// }
|
||||
// println!("{GREEN}[trace]{RESET} Skipped: {:#016x}", regs.rip);
|
||||
// ptrace::step(pid, None)?;
|
||||
// waitpid(pid, None)?;
|
||||
//}
|
||||
|
||||
// Save context
|
||||
let regs = ptrace::getregs(pid)?; // Save current registers
|
||||
let buffer = read_memory_vm(pid, regs.rip as usize, 128)?; // Save current memory context
|
||||
let buffer = read_memory_vm(pid, seg_x.0 as usize, 128)?; // Save current memory context
|
||||
let buffer_rw = read_memory_vm(pid, seg_rw.0 as usize, 128)?; // Save current rw memory
|
||||
|
||||
println!("{GREEN}[trace]{RESET} Seg_x.0 is {:#016x}", seg_x.0);
|
||||
|
||||
write_memory_ptrace(pid, seg_x.0 as usize, &[0x90u8; 128])?;
|
||||
ptrace::setregs(pid, user_regs_struct {
|
||||
rip: seg_x.0,
|
||||
..regs
|
||||
})?;
|
||||
|
||||
// Do inject here
|
||||
|
||||
inject3(pid, seg_rw, regs)?;
|
||||
inject3(
|
||||
pid,
|
||||
seg_rw,
|
||||
user_regs_struct {
|
||||
rip: seg_x.0,
|
||||
..regs
|
||||
},
|
||||
)?;
|
||||
|
||||
// End inject logics
|
||||
|
||||
// Restore context
|
||||
ptrace::setregs(pid, regs)?;
|
||||
write_memory_ptrace(pid, regs.rip as usize, &buffer)?;
|
||||
write_memory_ptrace(pid, seg_x.0 as usize, &buffer)?;
|
||||
write_memory_vm(pid, seg_rw.0 as usize, &buffer_rw)?;
|
||||
|
||||
ptrace::detach(pid, None)?;
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
{"rustc_fingerprint":11864223873831121762,"outputs":{"7971740275564407648":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.so\nlib___.so\nlib___.a\nlib___.so\n/home/acite/.rustup/toolchains/stable-x86_64-unknown-linux-gnu\noff\npacked\nunpacked\n___\ndebug_assertions\npanic=\"unwind\"\nproc_macro\ntarget_abi=\"\"\ntarget_arch=\"x86_64\"\ntarget_endian=\"little\"\ntarget_env=\"gnu\"\ntarget_family=\"unix\"\ntarget_feature=\"fxsr\"\ntarget_feature=\"sse\"\ntarget_feature=\"sse2\"\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_os=\"linux\"\ntarget_pointer_width=\"64\"\ntarget_vendor=\"unknown\"\nunix\n","stderr":""},"17747080675513052775":{"success":true,"status":"","code":0,"stdout":"rustc 1.90.0 (1159e78c4 2025-09-14)\nbinary: rustc\ncommit-hash: 1159e78c4747b02ef996e55082b704c09b970588\ncommit-date: 2025-09-14\nhost: x86_64-unknown-linux-gnu\nrelease: 1.90.0\nLLVM version: 20.1.8\n","stderr":""}},"successes":{}}
|
||||
@@ -1,3 +0,0 @@
|
||||
Signature: 8a477f597d28d172789f06886806bc55
|
||||
# This file is a cache directory tag created by cargo.
|
||||
# For information about cache directory tags see https://bford.info/cachedir/
|
||||
Binary file not shown.
@@ -1 +0,0 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -1 +0,0 @@
|
||||
979dcd14d2bc51aa
|
||||
@@ -1 +0,0 @@
|
||||
{"rustc":16285725380928457773,"features":"[]","declared_features":"[\"arbitrary\", \"bytemuck\", \"example_generated\", \"serde\", \"serde_core\", \"std\"]","target":7691312148208718491,"profile":15657897354478470176,"path":16099685776734010893,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/bitflags-6bd6ffbc38de7ac6/dep-lib-bitflags","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
@@ -1 +0,0 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -1 +0,0 @@
|
||||
49fe66b7380610fa
|
||||
@@ -1 +0,0 @@
|
||||
{"rustc":16285725380928457773,"features":"[]","declared_features":"[\"arbitrary\", \"bytemuck\", \"example_generated\", \"serde\", \"serde_core\", \"std\"]","target":7691312148208718491,"profile":2225463790103693989,"path":16099685776734010893,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/bitflags-b38c1791fbb94bbd/dep-lib-bitflags","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
@@ -1 +0,0 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -1 +0,0 @@
|
||||
936d6d504e22b53a
|
||||
@@ -1 +0,0 @@
|
||||
{"rustc":16285725380928457773,"features":"[]","declared_features":"[\"arbitrary\", \"bytemuck\", \"example_generated\", \"serde\", \"serde_core\", \"std\"]","target":7691312148208718491,"profile":2241668132362809309,"path":16099685776734010893,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/bitflags-f4c5089826d514d1/dep-lib-bitflags","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
@@ -1 +0,0 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -1 +0,0 @@
|
||||
6c817590d5c77ad8
|
||||
@@ -1 +0,0 @@
|
||||
{"rustc":16285725380928457773,"features":"[\"default\", \"std\"]","declared_features":"[\"default\", \"i128\", \"std\"]","target":8344828840634961491,"profile":15657897354478470176,"path":47261432787038350,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/byteorder-488d2f8c43033f2b/dep-lib-byteorder","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
@@ -1 +0,0 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -1 +0,0 @@
|
||||
610d001fec19ee77
|
||||
@@ -1 +0,0 @@
|
||||
{"rustc":16285725380928457773,"features":"[\"default\", \"std\"]","declared_features":"[\"default\", \"i128\", \"std\"]","target":8344828840634961491,"profile":2225463790103693989,"path":47261432787038350,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/byteorder-660949308c728b98/dep-lib-byteorder","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
@@ -1 +0,0 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -1 +0,0 @@
|
||||
b0e45b10f8bfb17d
|
||||
@@ -1 +0,0 @@
|
||||
{"rustc":16285725380928457773,"features":"[\"default\", \"std\"]","declared_features":"[\"default\", \"i128\", \"std\"]","target":8344828840634961491,"profile":2241668132362809309,"path":47261432787038350,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/byteorder-ec64c3234ca862a5/dep-lib-byteorder","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
@@ -1 +0,0 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -1 +0,0 @@
|
||||
cb505de9e6460bea
|
||||
@@ -1 +0,0 @@
|
||||
{"rustc":16285725380928457773,"features":"[]","declared_features":"[\"core\", \"rustc-dep-of-std\"]","target":13840298032947503755,"profile":2241668132362809309,"path":5877701015150254181,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/cfg-if-0d06577c98329a83/dep-lib-cfg_if","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
@@ -1 +0,0 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -1 +0,0 @@
|
||||
338f6c48cef9260b
|
||||
@@ -1 +0,0 @@
|
||||
{"rustc":16285725380928457773,"features":"[]","declared_features":"[\"core\", \"rustc-dep-of-std\"]","target":13840298032947503755,"profile":15657897354478470176,"path":5877701015150254181,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/cfg-if-43f8c950438ad461/dep-lib-cfg_if","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
@@ -1 +0,0 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -1 +0,0 @@
|
||||
8a6edfde7b5f27a5
|
||||
@@ -1 +0,0 @@
|
||||
{"rustc":16285725380928457773,"features":"[]","declared_features":"[]","target":14022534369768855544,"profile":4865940544660723616,"path":1501229088839890109,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/cfg_aliases-4c174da7cc486c29/dep-lib-cfg_aliases","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
@@ -1 +0,0 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -1 +0,0 @@
|
||||
f2f5e5789faf42b7
|
||||
@@ -1 +0,0 @@
|
||||
{"rustc":16285725380928457773,"features":"[\"__no_warn_on_missing_unsafe\", \"default\", \"dtor\", \"proc_macro\"]","declared_features":"[\"__no_warn_on_missing_unsafe\", \"default\", \"dtor\", \"proc_macro\", \"used_linker\"]","target":12000066584039447229,"profile":15657897354478470176,"path":4803490687379766138,"deps":[[2800821796651017684,"dtor",false,1340909728606601811],[14566786680421874444,"ctor_proc_macro",false,1127171802473362288]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/ctor-764f90eab28ab065/dep-lib-ctor","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
@@ -1 +0,0 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -1 +0,0 @@
|
||||
d39cd794b12da8da
|
||||
@@ -1 +0,0 @@
|
||||
{"rustc":16285725380928457773,"features":"[\"__no_warn_on_missing_unsafe\", \"default\", \"dtor\", \"proc_macro\"]","declared_features":"[\"__no_warn_on_missing_unsafe\", \"default\", \"dtor\", \"proc_macro\", \"used_linker\"]","target":12000066584039447229,"profile":2241668132362809309,"path":4803490687379766138,"deps":[[2800821796651017684,"dtor",false,18016150149204271332],[14566786680421874444,"ctor_proc_macro",false,1127171802473362288]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/ctor-c7993d1f929e2c48/dep-lib-ctor","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
@@ -1 +0,0 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -1 +0,0 @@
|
||||
70f34247c884a40f
|
||||
@@ -1 +0,0 @@
|
||||
{"rustc":16285725380928457773,"features":"[\"default\"]","declared_features":"[\"default\"]","target":9792173086656756395,"profile":2225463790103693989,"path":211077856188338067,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/ctor-proc-macro-6f45fcea41a18c46/dep-lib-ctor_proc_macro","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
@@ -1 +0,0 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -1 +0,0 @@
|
||||
534276314bde9b12
|
||||
@@ -1 +0,0 @@
|
||||
{"rustc":16285725380928457773,"features":"[\"__no_warn_on_missing_unsafe\", \"proc_macro\"]","declared_features":"[\"__no_warn_on_missing_unsafe\", \"default\", \"proc_macro\", \"used_linker\"]","target":15948546385508826175,"profile":15657897354478470176,"path":3047512095251281991,"deps":[[5953901296947807576,"dtor_proc_macro",false,15705612463256070353]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/dtor-868de25bd3f2f018/dep-lib-dtor","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
@@ -1 +0,0 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -1 +0,0 @@
|
||||
e4e06b671b3906fa
|
||||
@@ -1 +0,0 @@
|
||||
{"rustc":16285725380928457773,"features":"[\"__no_warn_on_missing_unsafe\", \"proc_macro\"]","declared_features":"[\"__no_warn_on_missing_unsafe\", \"default\", \"proc_macro\", \"used_linker\"]","target":15948546385508826175,"profile":2241668132362809309,"path":3047512095251281991,"deps":[[5953901296947807576,"dtor_proc_macro",false,15705612463256070353]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/dtor-f50197c50db89aed/dep-lib-dtor","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
@@ -1 +0,0 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -1 +0,0 @@
|
||||
d16853cc528bf5d9
|
||||
@@ -1 +0,0 @@
|
||||
{"rustc":16285725380928457773,"features":"[\"default\"]","declared_features":"[\"default\"]","target":16179305312861323885,"profile":2225463790103693989,"path":7656187036036136149,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/dtor-proc-macro-6b6e7d2721848f5f/dep-lib-dtor_proc_macro","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
@@ -1 +0,0 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -1 +0,0 @@
|
||||
223911ebfecb707f
|
||||
@@ -1 +0,0 @@
|
||||
{"rustc":16285725380928457773,"features":"[\"default\"]","declared_features":"[\"default\", \"dynasm_extract\", \"dynasm_opmap\", \"filelocal\"]","target":6502522481954698875,"profile":2225463790103693989,"path":2110350367181998116,"deps":[[373107762698212489,"proc_macro2",false,18418728764669633043],[3712811570531045576,"byteorder",false,15598999979416715628],[9001817693037665195,"bitflags",false,12272798070039485847],[11004406779467019477,"syn",false,17054757467241875575],[11082282709338087849,"quote",false,13751178957886922814],[15755541468655779741,"proc_macro_error2",false,10610446170306630552],[17917672826516349275,"lazy_static",false,16608780045822551541]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/dynasm-ce248869b1be4d7e/dep-lib-dynasm","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
@@ -1 +0,0 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -1 +0,0 @@
|
||||
e64088d7ee419ec6
|
||||
@@ -1 +0,0 @@
|
||||
{"rustc":16285725380928457773,"features":"[\"default\"]","declared_features":"[\"default\", \"dynasm_extract\", \"dynasm_opmap\", \"filelocal\"]","target":6502522481954698875,"profile":2225463790103693989,"path":2110350367181998116,"deps":[[373107762698212489,"proc_macro2",false,18418728764669633043],[3712811570531045576,"byteorder",false,8641873236893633889],[9001817693037665195,"bitflags",false,18018908949774270025],[11004406779467019477,"syn",false,17054757467241875575],[11082282709338087849,"quote",false,13751178957886922814],[15755541468655779741,"proc_macro_error2",false,10610446170306630552],[17917672826516349275,"lazy_static",false,15803469156421233194]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/dynasm-d04518e4fa1681fa/dep-lib-dynasm","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
@@ -1 +0,0 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -1 +0,0 @@
|
||||
a89881e0652eeb2c
|
||||
@@ -1 +0,0 @@
|
||||
{"rustc":16285725380928457773,"features":"[]","declared_features":"[]","target":15886189400227397014,"profile":2241668132362809309,"path":15382069866284668293,"deps":[[685410403069204595,"memmap2",false,4382292941552381353],[1345404220202658316,"fnv",false,14875917890030540596],[3712811570531045576,"byteorder",false,9057231397766030512],[9713236995389452595,"dynasm",false,14311949159904067814]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/dynasmrt-7f14762aa311184f/dep-lib-dynasmrt","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
@@ -1 +0,0 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -1 +0,0 @@
|
||||
b8c600c7a82edbe6
|
||||
@@ -1 +0,0 @@
|
||||
{"rustc":16285725380928457773,"features":"[]","declared_features":"[]","target":15886189400227397014,"profile":15657897354478470176,"path":15382069866284668293,"deps":[[685410403069204595,"memmap2",false,8978718846108284572],[1345404220202658316,"fnv",false,1384318429424838520],[3712811570531045576,"byteorder",false,15598999979416715628],[9713236995389452595,"dynasm",false,9183063935934347554]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/dynasmrt-c0557e3efcfa09bd/dep-lib-dynasmrt","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
@@ -1 +0,0 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -1 +0,0 @@
|
||||
3417264781e071ce
|
||||
@@ -1 +0,0 @@
|
||||
{"rustc":16285725380928457773,"features":"[\"default\", \"std\"]","declared_features":"[\"default\", \"std\"]","target":10248144769085601448,"profile":2241668132362809309,"path":8549509478052933381,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/fnv-2f01830a992dc6e2/dep-lib-fnv","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
@@ -1 +0,0 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -1 +0,0 @@
|
||||
78e7e4f146163613
|
||||
@@ -1 +0,0 @@
|
||||
{"rustc":16285725380928457773,"features":"[\"default\", \"std\"]","declared_features":"[\"default\", \"std\"]","target":10248144769085601448,"profile":15657897354478470176,"path":8549509478052933381,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/fnv-4bf9ac57e0281eeb/dep-lib-fnv","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
@@ -1 +0,0 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -1 +0,0 @@
|
||||
ed31bda974afdbe9
|
||||
@@ -1 +0,0 @@
|
||||
{"rustc":16285725380928457773,"features":"[\"block_encoder\", \"code_asm\", \"decoder\", \"default\", \"encoder\", \"fast_fmt\", \"gas\", \"instr_info\", \"intel\", \"lazy_static\", \"masm\", \"nasm\", \"op_code_info\", \"std\"]","declared_features":"[\"__internal_flip\", \"block_encoder\", \"code_asm\", \"db\", \"decoder\", \"default\", \"encoder\", \"exhaustive_enums\", \"fast_fmt\", \"gas\", \"instr_info\", \"intel\", \"lazy_static\", \"masm\", \"mvex\", \"nasm\", \"no_d3now\", \"no_evex\", \"no_std\", \"no_vex\", \"no_xop\", \"op_code_info\", \"serde\", \"std\"]","target":2502136693845616101,"profile":15657897354478470176,"path":253715998336001937,"deps":[[17917672826516349275,"lazy_static",false,16608780045822551541]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/iced-x86-a16a90362048bddf/dep-lib-iced_x86","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
@@ -1 +0,0 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -1 +0,0 @@
|
||||
c798ffe6d136e088
|
||||
@@ -1 +0,0 @@
|
||||
{"rustc":16285725380928457773,"features":"[\"block_encoder\", \"code_asm\", \"decoder\", \"default\", \"encoder\", \"fast_fmt\", \"gas\", \"instr_info\", \"intel\", \"lazy_static\", \"masm\", \"nasm\", \"op_code_info\", \"std\"]","declared_features":"[\"__internal_flip\", \"block_encoder\", \"code_asm\", \"db\", \"decoder\", \"default\", \"encoder\", \"exhaustive_enums\", \"fast_fmt\", \"gas\", \"instr_info\", \"intel\", \"lazy_static\", \"masm\", \"mvex\", \"nasm\", \"no_d3now\", \"no_evex\", \"no_std\", \"no_vex\", \"no_xop\", \"op_code_info\", \"serde\", \"std\"]","target":2502136693845616101,"profile":2241668132362809309,"path":253715998336001937,"deps":[[17917672826516349275,"lazy_static",false,2568278569051145795]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/iced-x86-a996d80c3efd4f81/dep-lib-iced_x86","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user