解决不同架构的ELF在linux上运行报错的问题

1.遇到的问题无法运行:

很显然这里的elf存在3种不同的架构

┌──(kali㉿kali)-[~/Desktop]
└─$ ./TCPL                   
riscv64-binfmt-P: Could not open '/lib/ld-linux-riscv64-lp64d.so.1': No such file or directory
                                                                                                                                                                                                                                           
┌──(kali㉿kali)-[~/Desktop]
└─$ ./main
qemu: uncaught target signal 4 (Illegal instruction) - core dumped
zsh: illegal hardware instruction  ./main
                                                                                                                                                                                                                                           
┌──(kali㉿kali)-[~/Desktop]
└─$ ./a70805912bd845fb92cb4e98bb0531dd 
ppc64le-binfmt-P: Could not open '/lib64/ld64.so.2': No such file or directory

这是3个elf的区别:

┌──(kali㉿kali)-[~/Desktop]
└─$ file ./TCPL
./TCPL: ELF 64-bit LSB pie executable, UCB RISC-V, RVC, double-float ABI, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-riscv64-lp64d.so.1, BuildID[sha1]=97853ab52c6dc9a68d68295c7ec62cc790905b3d, for GNU/Linux 4.15.0, not stripped
                                                                                                                                                                                                                                           
┌──(kali㉿kali)-[~/Desktop]
└─$ file ./main
./main: ELF 64-bit LSB executable, LoongArch, version 1 (GNU/Linux), statically linked, BuildID[sha1]=d5e0c55633e219eba65de1d09a45173c22668739, for GNU/Linux 5.19.0, with debug_info, not stripped
                                                                                                                          
┌──(kali㉿kali)-[~/Desktop]
└─$ file ./a70805912bd845fb92cb4e98bb0531dd 
./a70805912bd845fb92cb4e98bb0531dd: ELF 64-bit LSB executable, 64-bit PowerPC or cisco 7500, OpenPOWER ELF V2 ABI, version 1 (SYSV), dynamically linked, interpreter /lib64/ld64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=16c70fb580abf275b8c636b1829dd621179c23e3, stripped

得出结构是缺少对应架构的libc!
所以直接去安装一手就可以解决了!

2.开始修复

  1. riscv64架构的elf
    先更新:
┌──(kali㉿kali)-[~/Desktop]
└─$ sudo apt update   

安装:

┌──(kali㉿kali)-[~/Desktop]
└─$ sudo apt install gcc-riscv64-linux-gnu
# 由于安装后并未将libc文件加入环境变量所以需要手动复制一下!
┌──(kali㉿kali)-[~/Desktop]
└─$sudo cp /usr/riscv64-linux-gnu/lib/* /lib/

┌──(kali㉿kali)-[~/Desktop]
└─$ ./TCPL                            
FLAG{PLCT_An4_r1SCv_x1huann1}
Please replace 1 with the following picture.
 *** 
*   *
*   *
*   *
 *** 

  1. powerpc64le架构的elf
┌──(kali㉿kali)-[~/Desktop]
└─$ sudo apt install gcc-powerpc64le-linux-gnu


┌──(kali㉿kali)-[~/Desktop]
└─$ sudo cp /usr/powerpc64le-linux-gnu/lib/* /lib/ 

┌──(kali㉿kali)-[~/Desktop]
└─$ ./a70805912bd845fb92cb4e98bb0531dd 
ppc64le-binfmt-P: Could not open '/lib64/ld64.so.2': Too many levels of symbolic links
# 还是无法运行因为这个是64位的

┌──(kali㉿kali)-[~/Desktop]
└─$ file ./a70805912bd845fb92cb4e98bb0531dd 
./a70805912bd845fb92cb4e98bb0531dd: ELF 64-bit LSB executable, 64-bit PowerPC or cisco 7500, OpenPOWER ELF V2 ABI, version 1 (SYSV), dynamically linked, interpreter /lib64/ld64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=16c70fb580abf275b8c636b1829dd621179c23e3, stripped

发现他的so的位置是/lib64/ld64.so.2,再去看看刚刚安装的powerpc64le-linux-gnu是否有/lib64/ld64.so.2
请添加图片描述

其实他用的就是/lib/ld64.so.2的文件,所以直接手动创建一手链接:

┌──(kali㉿kali)-[/usr/lib]
└─$ sudo ln -s /lib/ld64.so.2 /lib64/ld64.so.2

成功!

┌──(kali㉿kali)-[~/Desktop]
└─$ ./a70805912bd845fb92cb4e98bb0531dd
8ceeca8e9d7c85fb0d869032
Bingo!
  1. LoongArch架构的elf
    不知道缺少什么,所以直接安装一遍qemu-user qemu-system
┌──(kali㉿kali)-[~/Desktop]
└─$ sudo apt-get install qemu-user qemu-system

┌──(kali㉿kali)-[~/Desktop]
└─$ ./main                                    
XYCTF{7e5165f1-385d-4fe9-1f2664d833a648a4}

发现成功!

4.又遇到问题

也可以继续安装一遍,就可以运行了,但是之前可以运行的又出问题了:

┌──(kali㉿kali)-[~/Desktop]
└─$ sudo apt-get install qemu-user qemu-system

┌──(kali㉿kali)-[~/Desktop]
└─$ ./main                                    
XYCTF{7e5165f1-385d-4fe9-1f2664d833a648a4}

┌──(kali㉿kali)-[~/Desktop]
└─$ file ./TCPL 
./TCPL: ELF 64-bit LSB pie executable, UCB RISC-V, RVC, double-float ABI, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-riscv64-lp64d.so.1, BuildID[sha1]=97853ab52c6dc9a68d68295c7ec62cc790905b3d, for GNU/Linux 4.15.0, not stripped

又重新试了一遍发现是之前添加的:
sudo cp /usr/powerpc64le-linux-gnu/lib/* /lib/

sudo cp /usr/riscv64-linux-gnu/lib/* /lib/
被覆盖了需要重新再复制一遍!

5.总结:

先尝试安装:

┌──(kali㉿kali)-[~/Desktop]
└─$ sudo apt-get install qemu-user qemu-system

如果不可以运行就去下载对应的gcc编译器它会将libc文件也下载下来,再将libc文件复制到目标目录就可以运行了!
下载好的编译器都在这个目录:/usr/

请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值