Fehler „Keine solche Datei oder kein solches Verzeichnis“ beim Ausführen einer Binärdatei, bei dem auch die Meldung „Berechtigung verweigert“ angezeigt wird

Fehler „Keine solche Datei oder kein solches Verzeichnis“ beim Ausführen einer Binärdatei, bei dem auch die Meldung „Berechtigung verweigert“ angezeigt wird
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.

$ Datei Datengröße.o

datasize.o: ELF 64-Bit LSB verschiebbar, x86-64, Version 1 (SYSV), nicht entfernt

Nicht ausführbar: -

./Datengröße.o

bash: ./datasize.o: Berechtigung verweigert

Auch mit ldd

ldd Datengröße.o

ldd: Warnung: Sie haben keine Ausführungsberechtigung für „./datasize.o“, keine dynamische ausführbare Datei.

Ausgabe von strace

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 +++

Ausgabe von 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.

Antwort1

Tatsächlich können ".o"-Dateien ausgeführt werden, wenn sie nicht wirklich ".o"-Dateien sind. Wenn Sie also "ls" nach "ls.o" kopieren, können Sie ls.o ausführen und erhalten die Ausgabe des Befehls "ls". Übrigens, @jaychris, Sie möchten die Ausgabe einer Kompilierung wahrscheinlich nicht in eine "C"-Quelldatei einfügen. Siekönnte, aber wie bei einer ausführbaren Datei „ls.o“ kann es verwirrend sein.

Ich sehe im Originalbeitrag nichts, das darauf hinweist, dass die Datei, die der Benutzer ausführen möchte, über Ausführungsberechtigungen verfügt. Wenn der Autor ein „\ls -l datasize.o“ ausführen könnte, würde er zeigen, welche Berechtigungen er dafür hat.

Beachten Sie, dass das einfache Setzen des ausführbaren Bits (mit „chmod +x datasize.o“) es nicht zu einem ausführbaren Programm macht, wenn es sich wirklich um eine verknüpfbare Datei handelt. In diesem Fall können Sie, wenn datasize.o ein „main“ enthält, versuchen, was @jaychris angedeutet hat … verwenden Sie gcc -o datasize datasize.c … das erzeugt kein verknüpfbares „datasize.o“, sondern versucht, eine ausführbare Datei zu erstellen und sie in eine Datei namens „datasize“ zu legen (für die Sie mit „chmod +x datasize“ immer noch die Berechtigung „ausführbar“ aktivieren müssen).

Übrigens möchten Sie vielleicht die Manpage „chmod“ („man 1 chmod“) durchlesen.

Hoffe das hilft (?)...

Antwort2

.o-Dateien können nicht ausgeführt werden. Sie müssen verknüpft werden und die endgültige ausführbare Datei muss erstellt werden. Normalerweise geschieht dies mit „gcc -o file.c“, oder Kompilierung und Verknüpfung werden in separaten Schritten durchgeführt.

verwandte Informationen