This commit is contained in:
2026-06-08 20:30:21 -04:00
parent c17122679e
commit 6bc502d284
4 changed files with 45 additions and 13 deletions
+11 -6
View File
@@ -2,12 +2,17 @@ use crate::backend::pe::data_dir::DataDir;
use super::ByteEncoder;
pub struct Import {
pub struct LibImport {
pub name: String,
pub names: Vec<String>,
pub syms: Vec<SymImport>,
}
pub fn encode(data: &mut ByteEncoder, imports: &[Import]) -> DataDir {
pub struct SymImport {
name: String,
usages: Vec<usize>,
}
pub fn encode(data: &mut ByteEncoder, imports: &[LibImport]) -> DataDir {
let start = data.pos() as u32;
let idt = data.reserve_arr::<ImportDirTable>(imports.len());
// null entry to mark end
@@ -23,12 +28,12 @@ pub fn encode(data: &mut ByteEncoder, imports: &[Import]) -> DataDir {
// lookup table
data.align(size_of::<ImportLookupEntry>());
let lookup_start = data.pos();
let lookup = data.reserve_arr::<ImportLookupEntry>(import.names.len());
let lookup = data.reserve_arr::<ImportLookupEntry>(import.syms.len());
data.pad(size_of::<ImportLookupEntry>());
let lookup_end = data.pos();
for (i, name) in import.names.iter().enumerate() {
let rva = hint_name_entry(data, 0, name);
for (i, sym) in import.syms.iter().enumerate() {
let rva = hint_name_entry(data, 0, &sym.name);
data[lookup][i] = ImportLookupEntry::name(rva);
}