2 个版本
0.0.2 | 2023 年 10 月 3 日 |
---|---|
0.0.1 | 2023 年 10 月 1 日 |
在 构建实用工具 中排名 #610
40KB
845 行
包含 (ELF 可执行文件/库, 1KB) test.o
易于读取/写入 ELF 32/64 可重定位/可执行/动态文件
此软件包旨在与 orecc-back 一起使用。但是它完全独立。它甚至没有依赖项!
工作正在进行中:[x] 写入 ELF:段 [] 写入 ELF:节 [] 读取 ELF:段 [] 读取 ELF:节
lib.rs
:
易于读取/写入 ELF 32/64 可重定位/可执行/动态文件
读取 elf 文件
let mut file = std::fs::File::open("test.o").unwrap();
dbg!(orecc_elf::ELF::<u64>::read(&mut file));
写入 elf 文件(来源:https://www.youtube.com/watch?v=XH6jDiKxod8)
let mut file = std::fs::File::create("test.o").unwrap();
// An x86 program that just exits
let data = [
0xB8, 0x01, 0x00, 0x00, 0x00,
0xBB, 0x00, 0x00, 0x00, 0x00,
0xCD, 0x80,
];
orecc_elf::ELF::<u32>::new(
orecc_elf::Ident::new(
orecc_elf::Class::ELF32,
orecc_elf::ByteOrder::LSB,
orecc_elf::ABI::None,
0,
),
orecc_elf::Type::Exec,
orecc_elf::Machine::X86,
true,
vec![
orecc_elf::SegmentTemplate::new(
orecc_elf::SegmentType::Load,
data.to_vec(),
data.len() as _,
orecc_elf::SegmentFlags::Readable as u32 | orecc_elf::SegmentFlags::Executable as u32,
)
],
Vec::new(),
)
.unwrap()
.write(&mut file)
.unwrap();
x86_64 版本
let mut file = std::fs::File::create("test.o").unwrap();
// An x86_64 program that just exits
let data = [
0x48, 0xC7, 0xC0, 0x3C, 0x00, 0x00, 0x00,
0x48, 0xC7, 0xC7, 0x2A, 0x00, 0x00, 0x00,
0x0F, 0x05,
];
orecc_elf::ELF::<u64>::new(
orecc_elf::Ident::default(),
orecc_elf::Type::Exec,
orecc_elf::Machine::X86_64,
true,
vec![
orecc_elf::SegmentTemplate::new(
orecc_elf::SegmentType::Load,
data.to_vec(),
data.len() as _,
orecc_elf::SegmentFlags::Readable as u32 | orecc_elf::SegmentFlags::Executable as u32,
)
],
Vec::new(),
)
.unwrap()
.write(&mut file)
.unwrap();
依赖项
~25KB