简体   繁体   中英

bash: ./<filename> No such file or directory

I'm trying to run a binary. But when I'm trying to run the file I'm facing the following error.

`pegasus@pegasus:~/Documents/Courses/heaplab-main/house_of_force$ ./house_of_force 
bash: ./house_of_force: No such file or directory`

`pegasus@pegasus:~/Documents/Courses/heaplab-main/house_of_force$ ldd ./house_of_force 
    linux-vdso.so.1 (0x00007fff7c6da000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f3f879bd000)
    ../.glibc/glibc_2.28_no-tcache/ld.so.2 => /lib64/ld-linux-x86-64.so.2 (0x00007f3f87bf9000)
`

`

pegasus@pegasus:~/Documents/Courses/heaplab-main/house_of_force$ file ./house_of_force 
./house_of_force: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter ../.glibc/glibc_2.28_no-tcache/ld.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=278a2aec8b352ea120c49321ed3254eb15ca8ef5, with debug_info, not stripped`

pegasus@pegasus:~/Documents/Courses/heaplab-main/house_of_force$ readelf -l house_of_force 

Elf file type is EXEC (Executable file)
Entry point 0x400730
There are 9 program headers, starting at offset 64

Program Headers:
  Type           Offset             VirtAddr           PhysAddr
                 FileSiz            MemSiz              Flags  Align
  PHDR           0x0000000000000040 0x0000000000400040 0x0000000000400040
                 0x00000000000001f8 0x00000000000001f8  R      0x8
  INTERP         0x0000000000000238 0x0000000000400238 0x0000000000400238
                 0x0000000000000027 0x0000000000000027  R      0x1
      [Requesting program interpreter: ../.glibc/glibc_2.28_no-tcache/ld.so.2]
  LOAD           0x0000000000000000 0x0000000000400000 0x0000000000400000
                 0x0000000000000d88 0x0000000000000d88  R E    0x200000
  LOAD           0x0000000000001d70 0x0000000000601d70 0x0000000000601d70
                 0x00000000000002c0 0x00000000000002c8  RW     0x200000
  DYNAMIC        0x0000000000001d80 0x0000000000601d80 0x0000000000601d80
                 0x0000000000000200 0x0000000000000200  RW     0x8
  NOTE           0x0000000000000260 0x0000000000400260 0x0000000000400260
                 0x0000000000000044 0x0000000000000044  R      0x4
  GNU_EH_FRAME   0x0000000000000c04 0x0000000000400c04 0x0000000000400c04
                 0x000000000000004c 0x000000000000004c  R      0x4
  GNU_STACK      0x0000000000000000 0x0000000000000000 0x0000000000000000
                 0x0000000000000000 0x0000000000000000  RW     0x10
  GNU_RELRO      0x0000000000001d70 0x0000000000601d70 0x0000000000601d70
                 0x0000000000000290 0x0000000000000290  R      0x1

 Section to Segment mapping:
  Segment Sections...
   00     
   01     .interp 
   02     .interp .note.ABI-tag .note.gnu.build-id .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_r .rela.dyn .rela.plt .init .plt .plt.got .text .fini .rodata .eh_frame_hdr .eh_frame 
   03     .init_array .fini_array .dynamic .got .data .bss 
   04     .dynamic 
   05     .note.ABI-tag .note.gnu.build-id 
   06     .eh_frame_hdr 
   07     
   08     .init_array .fini_array .dynamic .got 

My System Details:

pegasus@pegasus:~/Documents/Courses/heaplab-main/house_of_force$ uname -a
Linux pegasus 5.15.0-58-generic #64-Ubuntu SMP Thu Jan 5 11:43:13 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

pegasus@pegasus:~/Documents/Courses/heaplab-main/house_of_force$ lsb_release -a
LSB Version:    core-11.1.0ubuntu4-noarch:printing-11.1.0ubuntu4-noarch:security-11.1.0ubuntu4-noarch
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.1 LTS
Release:    22.04
Codename:   jammy

I've already done chmod a+x house_of_force What I'm suspecting some shared object or the interpreter is broken. I'm unable to link them properly.

Help me running the file properly using ./house_of_force

I'm facing the following error

The problem is that your binary is linked in a very weird way.

In particular, its interpreter is set to ../.glibc/glibc_2.28_no-tcache/ld.so.2 , and this binary will run only when invoked from a directory in which ../.glibc/glibc_2.28_no-tcache/ld.so.2 exists.

Invoking this binary from any other directory will fail with ENOENT .

It is unlikely that that's what you want this binary to do. You'll need to fix your link line -- usually the interpreter is set to the absolute path to ld.so .

PS You probably want to link with this custom GLIBC build in order to solve some problem. But it's unlikely that linking with custom GLIBC is the right solution to whatever that problem is. See http://xyproblem.info .

Update:

It was a file given in linux heap exploitation course.

You should have explained this in your question.

Like the answer says, this binary will only run in a directory in which ../.glibc exists. If you have .glibc/ directory (containing glibc_2.28_no-tcache/ld.so.2 ), then do this:

cd .glibc
mkdir foo
mv /path/to/house_of_force foo
cd foo
./house_of_force

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM