由于要镜像重新打包,需要把镜像解包,然后发现imgrepacker这个工具在服务器上无法运行,在部分电脑上是可以运行的。
问题表现
给予imgrepacker可执行权限,然后执行./imgrepacker提示
$ ./imgrepacker
bash: ./imgrepacker: No such file or directory
ldd查看依赖时提示
$ ldd imgrepacker
not a dynamic executable
在正常的电脑上提示如下
$ ./imgrepacker
imgrepacker (version 2.0.7.8 linux)
LiveSuit's & PhoenixSuit's (Allwinner) firmware images unpacker/packer
(c) RedScorpio, Moscow, 2012-2022
[email protected]
Usage: ./imgrepacker [options] <file_or_dir_name>
Type "./imgrepacker /help" for additional information
$ ldd imgrepacker
linux-gate.so.1 (0xf7fa8000)
libc.so.6 => /lib32/libc.so.6 (0xf7dba000)
/lib/ld-linux.so.2 (0xf7faa000)
问题排查
确认程序是依赖
objdump -p imgrepacker
imgrepacker: 文件格式 elf32-i386
程序头:
PHDR off 0x00000034 vaddr 0x08048034 paddr 0x08048034 align 2**2
filesz 0x00000120 memsz 0x00000120 flags r-x
INTERP off 0x00000154 vaddr 0x08048154 paddr 0x08048154 align 2**0
filesz 0x00000013 memsz 0x00000013 flags r--
LOAD off 0x00000000 vaddr 0x08048000 paddr 0x08048000 align 2**12
filesz 0x00029ff0 memsz 0x00029ff0 flags r-x
LOAD off 0x0002af08 vaddr 0x08073f08 paddr 0x08073f08 align 2**12
filesz 0x00000760 memsz 0x0000d4b8 flags rw-
DYNAMIC off 0x0002af14 vaddr 0x08073f14 paddr 0x08073f14 align 2**2
filesz 0x000000e8 memsz 0x000000e8 flags rw-
NOTE off 0x00000168 vaddr 0x08048168 paddr 0x08048168 align 2**2
filesz 0x00000044 memsz 0x00000044 flags r--
EH_FRAME off 0x000271f4 vaddr 0x0806f1f4 paddr 0x0806f1f4 align 2**2
filesz 0x00000554 memsz 0x00000554 flags r--
STACK off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**4
filesz 0x00000000 memsz 0x00000000 flags rw-
RELRO off 0x0002af08 vaddr 0x08073f08 paddr 0x08073f08 align 2**0
filesz 0x000000f8 memsz 0x000000f8 flags r--
动态节:
NEEDED libc.so.6
INIT 0x08048964
FINI 0x08069764
INIT_ARRAY 0x08073f08
INIT_ARRAYSZ 0x00000004
FINI_ARRAY 0x08073f0c
FINI_ARRAYSZ 0x00000004
GNU_HASH 0x080481ac
STRTAB 0x0804851c
SYMTAB 0x080481cc
STRSZ 0x000001e3
SYMENT 0x00000010
DEBUG 0x00000000
PLTGOT 0x08074000
PLTRELSZ 0x00000190
PLTREL 0x00000011
JMPREL 0x080487d4
REL 0x080487cc
RELSZ 0x00000008
RELENT 0x00000008
VERNEED 0x0804876c
VERNEEDNUM 0x00000001
VERSYM 0x08048700
版本引用:
required from libc.so.6:
0x0d696913 0x00 06 GLIBC_2.3
0x0d696911 0x00 05 GLIBC_2.1
0x0d696917 0x00 04 GLIBC_2.7
0x0d696910 0x00 03 GLIBC_2.0
0x0d696912 0x00 02 GLIBC_2.2
这里如果提示objdump不可用按如下处理
$ objdump -p imgrepacker
Command 'objdump' not found, but can be installed with:
apt install binutils
Please ask your administrator.
确认了是32位程序非动态可执行文件,那就问问AI。
问题处理
添加32位架构支持
sudo dpkg --add-architecture i386
更新软件包列表
sudo apt update
安装通用的32位库
sudo apt install libc6:i386 libncurses5:i386 libstdc++6:i386
问题总结
问题点主要是集中于能否运行32位程序上,提示信息让人摸不着头脑而已。
评论区