diff --git a/src/pe/header.rs b/src/pe/header.rs index 4ec7af55c..6318af738 100644 --- a/src/pe/header.rs +++ b/src/pe/header.rs @@ -1,3 +1,4 @@ +use crate::alloc::vec::Vec; use crate::error; use crate::pe::{optional_header, section_table, symbol}; use crate::strtab; diff --git a/src/pe/section_table.rs b/src/pe/section_table.rs index 33d2e5189..3fa671898 100644 --- a/src/pe/section_table.rs +++ b/src/pe/section_table.rs @@ -2,7 +2,6 @@ use crate::alloc::string::{String, ToString}; use scroll::{ctx, Pread, Pwrite}; use crate::error::{self, Error}; use crate::pe::relocation; -use std::io::Write; #[repr(C)] #[derive(Debug, PartialEq, Clone, Default)] @@ -93,7 +92,25 @@ impl SectionTable { if idx <= 9_999_999 { // 10^7 - 1 self.name = [0; 8]; self.name[0] = b'/'; - write!(&mut self.name[1..], "{}", idx).unwrap(); + if idx == 0 { + self.name[1] = b'0'; + } else { + let mut i = 0; + while idx != 0 { + let rem = (idx % 10) as u8; + idx /= 10; + self.name[7 - i] = b'0' + rem; + i += 1; + } + if i < 7 { + for j in 0..i { + self.name[1 + j] = self.name[8 - i + j] + } + for j in i..7 { + self.name[1 + j] = 0; + } + } + } Ok(()) } else if idx as u64 <= 0xfff_fff_fff { // 64^6 - 1 self.name[0] = b'/'; diff --git a/src/pe/symbol.rs b/src/pe/symbol.rs index 52e533014..e44f27dc9 100644 --- a/src/pe/symbol.rs +++ b/src/pe/symbol.rs @@ -1,3 +1,4 @@ +use crate::alloc::vec::Vec; use crate::error; use crate::strtab; use core::fmt::{self, Debug};