From 1ed6e05a11361e29a88204d2e04a13e008013c09 Mon Sep 17 00:00:00 2001 From: SteveXMH <39523898+Steve-xmh@users.noreply.github.com> Date: Sat, 13 Jan 2024 21:15:25 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3ELF=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E6=9E=B6=E6=9E=84=E8=A7=A3=E6=9E=90=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scl-core/src/utils.rs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/scl-core/src/utils.rs b/scl-core/src/utils.rs index ae3c2ee..b4a46f9 100644 --- a/scl-core/src/utils.rs +++ b/scl-core/src/utils.rs @@ -384,18 +384,23 @@ pub async fn get_exec_arch(file_path: impl AsRef) -> DynResult< anyhow::bail!("文件不是一个合法的 ELF 可执行文件"); } - file.seek(inner_future::io::SeekFrom::Start(0x12)).await?; + file.seek(inner_future::io::SeekFrom::Start(0x10)).await?; let mut buf = [0u8; 2]; file.read_exact(&mut buf).await?; let elf_type = u16::from_le_bytes(buf); + file.read_exact(&mut buf).await?; + let arch = u16::from_le_bytes(buf); - if elf_type != 2 { - anyhow::bail!("文件不是一个合法的 ELF 可执行文件"); + if elf_type != 0x02 && elf_type != 0x03 { + anyhow::bail!( + "文件不是一个合法的 ELF 可执行文件,ELF 类型不是可执行文件或共享对象库:{:04X}", + elf_type + ); } - match u16::from_le_bytes(buf) { + match arch { 0x03 => Ok(Arch::X86), // X86 0x3E => Ok(Arch::X64), // X86_64 0xB7 => Ok(Arch::ARM64), // ARM64