标签搜索

目 录CONTENT

文章目录

Ubuntu 20.04无法运行imgrepacker的问题处理

沙漠渔
2024-05-09 10:56:13 / 0 评论 / 0 点赞 / 41 阅读 / 3,300 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2024-05-09,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

由于要镜像重新打包,需要把镜像解包,然后发现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
	    RedScorpio.lab@gmail.com

	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位程序上,提示信息让人摸不着头脑而已。

0
广告 广告

评论区