由于要镜像重新打包,需要把镜像解包,然后发现imgrepacker这个工具在服务器上无法运行,在部分电脑上是可以运行的。
问题表现 {#问题表现}
给予imgrepacker可执行权限,然后执行./imgrepacker提示
$ ./imgrepacker bash: ./imgrepacker: No such file or directory
</code> </pre>
ldd查看依赖时提示
$ ldd imgrepacker not a dynamic executable
&lt;/code&gt; &lt;/pre&gt;
在正常的电脑上提示如下
$ ./imgrepacker imgrepacker (version 2.0.7.8 linux) LiveSuit's &amp;amp; PhoenixSuit's (Allwinner) firmware images unpacker/packer (c) RedScorpio, Moscow, 2012-2022 RedScorpio.lab@gmail.com Usage: ./imgrepacker [options] &amp;lt;file_or_dir_name&amp;gt; Type &quot;./imgrepacker /help&quot; for additional information &lt;/code&gt; &lt;/pre&gt; $ ldd imgrepacker linux-gate.so.1 (0xf7fa8000) libc.so.6 =&gt; /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 22 filesz 0x00000120 memsz 0x00000120 flags r-x INTERP off 0x00000154 vaddr 0x08048154 paddr 0x08048154 align 20 filesz 0x00000013 memsz 0x00000013 flags r-- LOAD off 0x00000000 vaddr 0x08048000 paddr 0x08048000 align 212 filesz 0x00029ff0 memsz 0x00029ff0 flags r-x LOAD off 0x0002af08 vaddr 0x08073f08 paddr 0x08073f08 align 212 filesz 0x00000760 memsz 0x0000d4b8 flags rw- DYNAMIC off 0x0002af14 vaddr 0x08073f14 paddr 0x08073f14 align 22 filesz 0x000000e8 memsz 0x000000e8 flags rw- NOTE off 0x00000168 vaddr 0x08048168 paddr 0x08048168 align 22 filesz 0x00000044 memsz 0x00000044 flags r-- EH_FRAME off 0x000271f4 vaddr 0x0806f1f4 paddr 0x0806f1f4 align 22 filesz 0x00000554 memsz 0x00000554 flags r-- STACK off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 24 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 &lt;/code&gt; &lt;/pre&gt; 这里如果提示objdump不可用按如下处理 $ objdump -p imgrepacker Command 'objdump' not found, but can be installed with: apt install binutils Please ask your administrator. &lt;/code&gt; &lt;/pre&gt; 确认了是32位程序非动态可执行文件,那就问问AI。 问题处理 {#问题处理} ------------ 添加32位架构支持 sudo dpkg --add-architecture i386 &lt;/code&gt; &lt;/pre&gt; 更新软件包列表 sudo apt update &lt;/code&gt; &lt;/pre&gt; 安装通用的32位库 sudo apt install libc6:i386 libncurses5:i386 libstdc++6:i386 &lt;/code&gt; &lt;/pre&gt; 问题总结 {#问题总结} ------------ 问题点主要是集中于能否运行32位程序上,提示信息让人摸不着头脑而已。