遇到了编译问题(zsh not found filename)时patchelf的使用
这byd问题之前不知道为什么脑袋昏了一直没搞就拖到了现在,于是今天再重新看了一遍相关问题的知识和问AI,最后终于解决了

遇到了没办法打开某个二进制文件的问题,大部分情况是因为系统使用该文件指定的依赖和链接器时没有找到对应路径
首先file filename
./pwn1: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /home/kali/Desktop/hn2025/pwn1/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=a56e00aa0bd4fdd394c708fcc0bf3188eb8c8416, not stripped
其实这里的文件路径是kali但是我用的Linux是Ubuntu所以问题就出在这边
以及ldd filename
ldd pwn1                  
	linux-vdso.so.1 (0x00007fff841a6000)
	/home/kali/Desktop/hn2025/pwn1/libc.so.6 => not found
会发现指向的libc也是not found(因为也是指定的kali)
因此我们就要使用patchelf来查看和修改文件的依赖对象和链接器以及库
patchelf相关了解
1、下载
$ sudo apt update
$ sudo apt-get install patchelf
2、相关指令
下载完后
$ patchelf -h                   
syntax: patchelf
  [--set-interpreter FILENAME]
  [--page-size SIZE]
  [--print-interpreter]
  [--print-soname]		Prints 'DT_SONAME' entry of .dynamic section. Raises an error if DT_SONAME doesn't exist
  [--set-soname SONAME]		Sets 'DT_SONAME' entry to SONAME.
  [--set-rpath RPATH]
  [--remove-rpath]
  [--shrink-rpath]
  [--allowed-rpath-prefixes PREFIXES]		With '--shrink-rpath', reject rpath entries not starting with the allowed prefix
  [--print-rpath]
  [--force-rpath]
  [--add-needed LIBRARY]
  [--remove-needed LIBRARY]
  [--replace-needed LIBRARY NEW_LIBRARY]
  [--print-needed]
  [--no-default-lib]
  [--debug]
  [--version]
  FILENAME
print相关指令后面接-name就是查看该文件的指向路径
所以查看一下
➜  H&Npwn1 patchelf --print-interpreter ./pwn1
/lib64/ld-linux-x86-64.so.2
➜  H&Npwn1 patchelf --print-rpath ./pwn1      
/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu
➜  H&Npwn1 patchelf --print-needed ./pwn1
/home/desktop/H&Npwn1/libc.so.6
然后用patchelf --set-name来修改
➜  H&Npwn1 patchelf --set-interpreter /home/sgud4h5gh/Desktop/'H&Npwn1'/ld-linux-x86-64.so.2 ./pwn1
➜  H&Npwn1 patchelf --print-interpreter ./pwn1
/home/sgud4h5gh/Desktop/H&Npwn1/ld-linux-x86-64.so.2
➜  H&Npwn1 patchelf --set-rpath /home/sgud4h5gh/Desktop/'H&Npwn1'/libc.so.6 ./pwn1
➜  H&Npwn1 patchelf --print-rpath ./pwn1
/home/sgud4h5gh/Desktop/H&Npwn1/libc.so.6
➜  H&Npwn1 patchelf --replace-needed /home/kali/Desktop/hn2025/pwn1/libc.so.6 libc.so.6 ./pwn1
➜  H&Npwn1 patchelf --print-needed ./pwn1
libc.so.6
还有个小tips,存在一些特殊字符如&是系统会报错,用“”包住就行
以上就是全部解决步骤,最后./filename就能正常运行了。

                
            
        
浙公网安备 33010602011771号