Error "No existe tal archivo o directorio" al ejecutar un binario que también muestra permiso denegado

Error "No existe tal archivo o directorio" al ejecutar un binario que también muestra permiso denegado
I was just trying to execute a simple program **.c** program on **OPNESUSE-42.1** 
I did the following set of commands in which showing **Permission Denied** and also showing **relocatable** i am not able to understand that how it becomes relocatable file.

$ tamaño de datos del archivo.o

datasize.o: ELF LSB de 64 bits reubicable, x86-64, versión 1 (SYSV), no eliminado

No se puede ejecutar: -

./tamaño de datos.o

bash: ./datasize.o: Permiso denegado

Incluso con ldd

ldd tamaño de datos.o

ldd: advertencia: no tiene permiso de ejecución para `./datasize.o', no es un ejecutable dinámico

salida de traza

strace ./datasize.o

execve("./datasize.o", ["./datasize.o"], [/* 87 vars */]) = -1 EACCES (Permission denied)
write(2, "strace: exec: Permission denied\n", 32strace: exec: Permission denied
) = 32
exit_group(1)                           = ?
+++ exited with 1 +++

salida de readelf: -

readelf -a ./datasize.o 

ELF Header:
  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 
  Class:                             ELF64
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              REL (Relocatable file)
  Machine:                           Advanced Micro Devices X86-64
  Version:                           0x1
  Entry point address:               0x0
  Start of program headers:          0 (bytes into file)
  Start of section headers:          1040 (bytes into file)
  Flags:                             0x0
  Size of this header:               64 (bytes)
  Size of program headers:           0 (bytes)
  Number of program headers:         0
  Size of section headers:           64 (bytes)
  Number of section headers:         13
  Section header string table index: 10

Section Headers:
  [Nr] Name              Type             Address           Offset
       Size              EntSize          Flags  Link  Info  Align
  [ 0]                   NULL             0000000000000000  00000000
       0000000000000000  0000000000000000           0     0     0
  [ 1] .text             PROGBITS         0000000000000000  00000040
       000000000000009c  0000000000000000  AX       0     0     1
  [ 2] .rela.text        RELA             0000000000000000  00000318
       0000000000000078  0000000000000018   I      11     1     8
  [ 3] .data             PROGBITS         0000000000000000  000000dc
       0000000000000000  0000000000000000  WA       0     0     1
  [ 4] .bss              NOBITS           0000000000000000  000000dc
       0000000000000000  0000000000000000  WA       0     0     1
  [ 5] .rodata           PROGBITS         0000000000000000  000000e0
       0000000000000087  0000000000000000   A       0     0     8
  [ 6] .comment          PROGBITS         0000000000000000  00000167
       0000000000000019  0000000000000001  MS       0     0     1
  [ 7] .note.GNU-stack   PROGBITS         0000000000000000  00000180
       0000000000000000  0000000000000000           0     0     1
  [ 8] .eh_frame         PROGBITS         0000000000000000  00000180
       0000000000000038  0000000000000000   A       0     0     8
  [ 9] .rela.eh_frame    RELA             0000000000000000  00000390
       0000000000000018  0000000000000018   I      11     8     8
  [10] .shstrtab         STRTAB           0000000000000000  000003a8
       0000000000000061  0000000000000000           0     0     1
  [11] .symtab           SYMTAB           0000000000000000  000001b8
       0000000000000138  0000000000000018          12     9     8
  [12] .strtab           STRTAB           0000000000000000  000002f0
       0000000000000023  0000000000000000           0     0     1
Key to Flags:
  W (write), A (alloc), X (execute), M (merge), S (strings), l (large)
  I (info), L (link order), G (group), T (TLS), E (exclude), x (unknown)
  O (extra OS processing required) o (OS specific), p (processor specific)

There are no section groups in this file.

There are no program headers in this file.

Relocation section '.rela.text' at offset 0x318 contains 5 entries:
  Offset          Info           Type           Sym. Value    Sym. Name + Addend
000000000023  000a00000002 R_X86_64_PC32     0000000000000000 uname - 4
000000000028  00050000000a R_X86_64_32       0000000000000000 .rodata + 0
00000000002d  000b00000002 R_X86_64_PC32     0000000000000000 puts - 4
000000000087  00050000000a R_X86_64_32       0000000000000000 .rodata + 48
000000000091  000c00000002 R_X86_64_PC32     0000000000000000 printf - 4

Relocation section '.rela.eh_frame' at offset 0x390 contains 1 entries:
  Offset          Info           Type           Sym. Value    Sym. Name + Addend
000000000020  000200000002 R_X86_64_PC32     0000000000000000 .text + 0

The decoding of unwind sections for machine type Advanced Micro Devices X86-64 is not currently supported.

Symbol table '.symtab' contains 13 entries:
   Num:    Value          Size Type    Bind   Vis      Ndx Name
     0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND 
     1: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS datasize.c
     2: 0000000000000000     0 SECTION LOCAL  DEFAULT    1 
     3: 0000000000000000     0 SECTION LOCAL  DEFAULT    3 
     4: 0000000000000000     0 SECTION LOCAL  DEFAULT    4 
     5: 0000000000000000     0 SECTION LOCAL  DEFAULT    5 
     6: 0000000000000000     0 SECTION LOCAL  DEFAULT    7 
     7: 0000000000000000     0 SECTION LOCAL  DEFAULT    8 
     8: 0000000000000000     0 SECTION LOCAL  DEFAULT    6 
     9: 0000000000000000   156 FUNC    GLOBAL DEFAULT    1 main
    10: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND uname
    11: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND puts
    12: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND printf

No version information found in this file.

Respuesta1

En realidad, los archivos ".o" se pueden ejecutar si en realidad no son archivos ".o". Es decir, si copia "ls" a "ls.o", puede ejecutar ls.o y le dará el resultado del comando 'ls'. Por cierto, @jaychris, probablemente no quieras poner el resultado de una compilación en un archivo fuente "C". Túpodría, pero al igual que tener un ejecutable "ls.o", puede resultar confuso.

No veo nada en la publicación original que indique que el archivo que el usuario está intentando ejecutar tenga permiso ejecutable. Si el autor pudiera hacer "\ls -l datasize.o, mostraría qué permisos tiene sobre él.

Tenga en cuenta que simplemente configurar el bit ejecutable (con "chmod +x datasize.o") no lo convertirá en un programa que se pueda ejecutar si realmente es un archivo vinculable. En ese caso, si datasize.o tiene un "main", puede probar lo que @jaychris estaba insinuando... use gcc -o datasize datasize.c... eso no producirá un "datasize.o enlazable". ", pero intentará crear un ejecutable y colocarlo en un archivo llamado "datasize" (en el que aún debe habilitar el permiso "ejecutable" con "chmod +x datasize").

Por cierto, es posible que desees leer la página de manual "chmod" ("man 1 chmod").

Espero que esto ayude (?)...

Respuesta2

Los archivos .o no se pueden ejecutar. Deben vincularse y crearse el ejecutable final. La forma habitual de hacerlo es "gcc -o file.c" o la compilación y el enlace se realizan en pasos separados.

información relacionada