crt0/c0?

Direkte Linux-Programmierung, POSIX
Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

crt0/c0?

Beitrag von Xin » Do Nov 09, 2017 7:22 am

Moin,

Ich möchte ein Programm von Grund auf linken, heißt: Ich möchte auch den Linker von Hand aufrufen. Überall finde ich die Information, dass man den Linker mit /lib/crt0.o aufrufen soll.
Ich weiß, dass crt0 den Startcode des Programms darstellt und dass man den selbst assemblieren kann. Die Information, die mir fehlt ist: Muss man das?
Muss es nicht irgendwo Startcode geben, den der gcc verlinkt, wenn er ein Executable baut? Und wenn ja, wo finde ich den unter Ubuntu (bzw. Windows)? ^^
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

nufan
Wiki-Moderator
Beiträge: 2557
Registriert: Sa Jul 05, 2008 3:21 pm

Re: crt0/c0?

Beitrag von nufan » Fr Nov 10, 2017 9:32 am

Xin hat geschrieben:Muss man das?
Kommt drauf an, wen du fragst.

Das Betriebssystem braucht diesen Code nicht. Ein minimales aber erfolgreiches Programm sieht folgendermaßen aus:

Code: Alles auswählen

global _start
section .text
_start:
    mov eax, 1
    mov ebx, 0
    int 0x80
Alles was das Betriebssystem braucht, ist ein "_start" Einstiegspunkt. Im Falle eines mit gcc kompilierten C-Programms wird dieser von crt bereitgestellt. Sinn dahinter ist die Aufbereitung von z.B. argc und argv. Ich kann mir auch gut vorstellen, dass Funktionen wie atexit() von crt abhängig sind.
Xin hat geschrieben:Muss es nicht irgendwo Startcode geben, den der gcc verlinkt, wenn er ein Executable baut? Und wenn ja, wo finde ich den unter Ubuntu (bzw. Windows)? ^^
Auf meinem Arch Linux-System mit gcc 7.2 werden sogar mehrere crt Dateien verwendet:

Code: Alles auswählen

$ strace gcc main.c 2>&1 | grep crt | grep -v ENOENT
access("/usr/lib/gcc/x86_64-pc-linux-gnu/7.2.0/../../../../lib/Scrt1.o", R_OK) = 0
access("/usr/lib/gcc/x86_64-pc-linux-gnu/7.2.0/../../../../lib/crti.o", R_OK) = 0
access("/usr/lib/gcc/x86_64-pc-linux-gnu/7.2.0/crtbeginS.o", R_OK) = 0
access("/usr/lib/gcc/x86_64-pc-linux-gnu/7.2.0/crtendS.o", R_OK) = 0
access("/usr/lib/gcc/x86_64-pc-linux-gnu/7.2.0/../../../../lib/crtn.o", R_OK) = 0
Bei mir befinden sich die Dateien also in /usr/lib/gcc/x86_64-pc-linux-gnu/7.2.0/.

mfro
Beiträge: 346
Registriert: Mi Jan 16, 2013 4:58 pm

Re: crt0/c0?

Beitrag von mfro » Fr Nov 10, 2017 8:51 pm

Bevor Du "von Hand" linkst, macht es sicher Sinn, erst mal gcc (dem Compiler Driver) auf die Finger zu gucken. Da kann man schon eine ganze Menge erfahren:

Code: Alles auswählen

gcc -v xxx.c
Damit erfährst Du, welche Executables gcc so aufruft.

Wenn Du gcc den Linker mit "Wl,-Map -Wl,mapfile" aufrufen lässt, erzeugt er dir beim Linken ein Mapfile, dem Du detailliert entnehmen kannst, was er da so zusammenlinkt.

Die nächste Steigerung wäre dann die Entsprechung zu dem Assemblercode von nufan in C (nun ja, zwar Assembler, aber immerhin in einer C-Datei ;) ):

Code: Alles auswählen


void myexit(void)
{
        __asm__ __volatile__(
            "       .intel_syntax noprefix  \n\t"
            "       mov eax, 1              \n\t"
            "       mov ebx, 0              \n\t"
            "       int 0x80                \n\t"
            "       .att_syntax             \n\t"
            :
            :
         );
}

void _start(void)
{
        myexit();
}
Wenn Du das mit gcc baust

Code: Alles auswählen

gcc -Wl,-Map -Wl,mapfile -nostdlib -o tst tst.c
hast Du das kürzestmögliche "C"-Programm. -nostdlib unterbindet das Einbinden von crt0.o, das Programm beginnt bei _start. Allerdings fehlt dir so die gcc Runtime (möglicherweise muss libgcc.a händisch dazugelinkt werden) und Konstruktoren werden nicht aufgerufen (so was gibt's bei gcc auch in C - __attribute__ __constructor__). Es geht also längst nicht alles, was Du in C gewohnt bist. Aber es ist mal ein Start. Was genau willst Du damit erreichen?
It's as simple as that. And remember, Beethoven wrote his first symphony in C.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: crt0/c0?

Beitrag von Xin » Fr Nov 10, 2017 10:17 pm

nufan hat geschrieben:Alles was das Betriebssystem braucht, ist ein "_start" Einstiegspunkt. Im Falle eines mit gcc kompilierten C-Programms wird dieser von crt bereitgestellt. Sinn dahinter ist die Aufbereitung von z.B. argc und argv. Ich kann mir auch gut vorstellen, dass Funktionen wie atexit() von crt abhängig sind.
Genau, so stelle ich mir das auch vor. :-)

Da ich den Build-Prozess von Hand nachbilden will, fehlt mir nun diese Information, weswegen ich mit dem Linker kein brauchbrares Executable hinbekomme. ^^

Unter Ubuntu scheinen das drei Dateien zu sein: crt1, crti und crtn.
Wenn ich die zum Linken dazu nehme, kann ich das Programm linken, wenn ich es allerdings ausführen will schreibt er:

Code: Alles auswählen

xin@cypher:~/try/hworld$ ls -la hworld
-rwxrwxr-x 1 xin xin 7136 Nov 10 22:00 hworld
xin@cypher:~/try/hworld$ ./hworld 
bash: ./hworld: Datei oder Verzeichnis nicht gefunden
Da muss ich noch rausfinden, wie und warum das zu stande kommt.
nufan hat geschrieben:
Xin hat geschrieben:Muss es nicht irgendwo Startcode geben, den der gcc verlinkt, wenn er ein Executable baut? Und wenn ja, wo finde ich den unter Ubuntu (bzw. Windows)? ^^
Auf meinem Arch Linux-System mit gcc 7.2 werden sogar mehrere crt Dateien verwendet:

Code: Alles auswählen

$ strace gcc main.c 2>&1 | grep crt | grep -v ENOENT
Da kommt bei mir nichts raus.
Ich habe die drei jetzt gefunden, in dem ich einfach main start genannt habe und den gcc das habe kompilieren lassen. Mit dem Ergebnis, dass es ein Linkerfehler gebt mit dem Objectfile, wo start bereits definiert wird und so habe ich es dann gefunden.

Aber irgendwas hakt noch, nur das jetzt zu suchen, dafür bin ich jetzt zu müde :D
mfro hat geschrieben:Wenn Du das mit gcc baust

Code: Alles auswählen

gcc -Wl,-Map -Wl,mapfile -nostdlib -o tst tst.c
Das sieht interssant aus, das werde ich mir nochmal genauer geben.
Aktuell bin ich auf der Meeting C++ in Berlin und aktuell eher ziemlich platt.
Aber das erklärt mir mit dem Interrupt jedenfalls schonmal, warum mein Versuch abschmierte... In x86 Asm bin ich noch recht frisch unterwegs und in meiner Zeit vom Amiga endete ein Programm ganz einfach mit dem "ret". Also habe ich den Interrupt so nicht vor Augen gehabt.
mfro hat geschrieben:hast Du das kürzestmögliche "C"-Programm. -nostdlib unterbindet das Einbinden von crt0.o, das Programm beginnt bei _start. Allerdings fehlt dir so die gcc Runtime (möglicherweise muss libgcc.a händisch dazugelinkt werden) und Konstruktoren werden nicht aufgerufen (so was gibt's bei gcc auch in C - __attribute__ __constructor__). Es geht also längst nicht alles, was Du in C gewohnt bist. Aber es ist mal ein Start. Was genau willst Du damit erreichen?
Verstehen und den fehlenden Artikel in start: fertig schreiben. Ich weiß zwar grundsätzlich, wie ein Programm kompiliert wird und wie es geladen wird, aber wenn man dann so einen Artikel schreibt und das ganze nochmal tatsächlich nachvollziehen will, um es anschließend erklären zu können, da lernt man doch wieder einiges dazu. :-)
Seit ich sowas vor 20 Jahren auf dem Amiga gemacht habe, hat sich für mich die Hardware und das OS geändert. Ein paar Dinge sind dann doch anders und die Dokumentation dazu ist überschaubar, weswegen ich das jetzt ja auch nachvollziehen und erklären will.
Und offensichtlich läuft es auf den unterschiedlichen Linux-Versionen auch unterschiedlich, denn unter Nufans Arch Linux findet sich die crt0.o, unter Ubuntu gibt's es sie nicht. Nun da ich weiß, wie sie heißen, habe ich wieder Suchbegriffe für Google :)
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

nufan
Wiki-Moderator
Beiträge: 2557
Registriert: Sa Jul 05, 2008 3:21 pm

Re: crt0/c0?

Beitrag von nufan » Sa Nov 11, 2017 7:23 am

Xin hat geschrieben:
nufan hat geschrieben:
Xin hat geschrieben:Muss es nicht irgendwo Startcode geben, den der gcc verlinkt, wenn er ein Executable baut? Und wenn ja, wo finde ich den unter Ubuntu (bzw. Windows)? ^^
Auf meinem Arch Linux-System mit gcc 7.2 werden sogar mehrere crt Dateien verwendet:

Code: Alles auswählen

$ strace gcc main.c 2>&1 | grep crt | grep -v ENOENT
Da kommt bei mir nichts raus.
Hast du strace installiert? grep in Kombination mit "2>&1" schluckt die entsprechende Fehlermeldung.
Xin hat geschrieben:Wenn ich die zum Linken dazu nehme, kann ich das Programm linken, wenn ich es allerdings ausführen will schreibt er:

Code: Alles auswählen

xin@cypher:~/try/hworld$ ls -la hworld
-rwxrwxr-x 1 xin xin 7136 Nov 10 22:00 hworld
xin@cypher:~/try/hworld$ ./hworld 
bash: ./hworld: Datei oder Verzeichnis nicht gefunden
Was gibt denn

Code: Alles auswählen

$ ldd hworld
bzw.

Code: Alles auswählen

$ readelf -h hworld
aus?

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: crt0/c0?

Beitrag von Xin » Sa Nov 11, 2017 7:53 am

Hey, nufan:

Code: Alles auswählen

xin@cypher:~/try/hworld$ strace -V
strace -- version 4.15
xin@cypher:~/try/hworld$ ldd hworld
        linux-vdso.so.1 =>  (0x00007fff7a365000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f2d461aa000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f2d4678c000)
xin@cypher:~/try/hworld$ readelf -h hworld
ELF-Header:
  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 
  Klasse:                            ELF64
  Daten:                             2er-Komplement, Little-Endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI-Version:                       0
  Typ:                               DYN (geteilte Objektadatei)
  Maschine:                          Advanced Micro Devices X86-64
  Version:                           0x1
  Einstiegspunktadresse:               0x530
  Beginn der Programm-Header:          64 (Bytes in Datei)
  Beginn der Sektions-header:          6440 (Bytes in Datei)
  Flags:                             0x0
  Größe dieses Headers:              64 (Byte)
  Größe der Programm-Header:         56 (Byte)
  Number of program headers:         9
  Größe der Sektions-Header:         64 (bytes)
  Anzahl der Sektions-Header:        29
  Sektions-Header Stringtabellen-Index: 28
xin@cypher:~/try/hworld$ 
Gleich geht die MeetingC++ weiter, entsprechend sind die Chancen überschaubar, heute nochmal online zu kommen.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

nufan
Wiki-Moderator
Beiträge: 2557
Registriert: Sa Jul 05, 2008 3:21 pm

Re: crt0/c0?

Beitrag von nufan » So Nov 12, 2017 7:20 pm

Ich hatte mir irgendwie etwas anderes erhofft :D Ohne das Programm bin ich gerade etwas planlos, vielleicht kannst du mir das mal schicken.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: crt0/c0?

Beitrag von Xin » So Nov 12, 2017 8:54 pm

Das ist ein kein Problem: Es ist ein einfaches Hello World.

Interessanter dürfte die ToolChain sein, welche aber wohl nicht unbedingt 1:1 übertragen werden kann. Vielleicht brauche ich mal eine testweise eine VM mit ArchLinux, aber das geht gerade nicht - ich bin derzeit im ICE von der MeetingC++ nach Hause. Konferenz war gut, aber was mich geärgert hat ist dass 6 Studenten gar nicht erschienen sind. :-/
Nächstes Jahr!

Naja, die Toolchain:
Das sieht dann so aus:

Code: Alles auswählen

gcc -S hworld.c -o hworld.s
as hworld.s -o hworld.o
ld /usr/lib/x86_64-linux-gnu/crt1.o /usr/lib/x86_64-linux-gnu/crti.o /usr/lib/x86_64-linux-gnu/crtn.o hworld.o -o hworld -lc
und daraus erhalte ich folgendes:

Code: Alles auswählen

xin@cypher:~/try/hworld$ ls -la hworld
-rwxrwxr-x 1 xin xin 7136 Nov 12 20:37 hworld
xin@cypher:~/try/hworld$ ./hworld
bash: ./hworld: Datei oder Verzeichnis nicht gefunden
Da gab es schonmal bessere Fehlermeldungen. ^^

Aktuell weiß ich vorrangig, dass ich weniger Symbole habe, aber _start ist drin. Bzgl. der Libraries sieht das auch gut aus:

Code: Alles auswählen

xin@cypher:~/try/hworld$ ldd -d hworld
        linux-vdso.so.1 =>  (0x00007ffdcb195000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fbfbc530000)
        /lib/ld64.so.1 => /lib64/ld-linux-x86-64.so.2 (0x00007fbfbc910000)
xin@cypher:~/try/hworld$ ldd -d hworldc
        linux-vdso.so.1 =>  (0x00007ffc967f6000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f3b9caba000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f3b9d09c000)
hworldc ist das Programm direkt mit "gcc hworld.c -o hworldc" kompiliert.

Ich rate weiter... aber ich glaube, das wird heute eh nichts mehr. Ich laufe schon auf Energie-Drinks. Wir sind beim Post-Conference-Dinner "etwas" versackt und heute früh stand nach kurzer Nacht der Zimmerservice im Zimmer. An ein "Don't Disturb" hatte ich nicht mehr gedacht ;-)
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

mfro
Beiträge: 346
Registriert: Mi Jan 16, 2013 4:58 pm

Re: crt0/c0?

Beitrag von mfro » So Nov 12, 2017 9:42 pm

mach' mal readelf -a auf das Executable und auf ein "normal" compiliertes/gelinktes Programm.

Da wird (hoffentlich) klar, warum das nicht funktioniert.
It's as simple as that. And remember, Beethoven wrote his first symphony in C.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: crt0/c0?

Beitrag von Xin » So Nov 12, 2017 11:15 pm

Typ ist interessant...

mit gcc kompiliert:

Code: Alles auswählen

xin@cypher:~/try/hworld$ readelf -a hworldc
ELF-Header:
  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 
  Klasse:                            ELF64
  Daten:                             2er-Komplement, Little-Endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI-Version:                       0
  Typ:                               DYN (geteilte Objektadatei)
  Maschine:                          Advanced Micro Devices X86-64
  Version:                           0x1
  Einstiegspunktadresse:               0x530
  Beginn der Programm-Header:          64 (Bytes in Datei)
  Beginn der Sektions-header:          6440 (Bytes in Datei)
  Flags:                             0x0
  Größe dieses Headers:              64 (Byte)
  Größe der Programm-Header:         56 (Byte)
  Number of program headers:         9
  Größe der Sektions-Header:         64 (bytes)
  Anzahl der Sektions-Header:        29
  Sektions-Header Stringtabellen-Index: 28

Sektions-Header:
  [Nr] Name              Typ              Adresse           Offset
       Größe             Eintragsgröße    Flags  Link  Info  Ausr.
  [ 0]                   NULL             0000000000000000  00000000
       0000000000000000  0000000000000000           0     0     0
  [ 1] .interp           PROGBITS         0000000000000238  00000238
       000000000000001c  0000000000000000   A       0     0     1
  [ 2] .note.ABI-tag     NOTE             0000000000000254  00000254
       0000000000000020  0000000000000000   A       0     0     4
  [ 3] .note.gnu.build-i NOTE             0000000000000274  00000274
       0000000000000024  0000000000000000   A       0     0     4
  [ 4] .gnu.hash         GNU_HASH         0000000000000298  00000298
       000000000000001c  0000000000000000   A       5     0     8
  [ 5] .dynsym           DYNSYM           00000000000002b8  000002b8
       00000000000000a8  0000000000000018   A       6     1     8
  [ 6] .dynstr           STRTAB           0000000000000360  00000360
       0000000000000082  0000000000000000   A       0     0     1
  [ 7] .gnu.version      VERSYM           00000000000003e2  000003e2
       000000000000000e  0000000000000002   A       5     0     2
  [ 8] .gnu.version_r    VERNEED          00000000000003f0  000003f0
       0000000000000020  0000000000000000   A       6     1     8
  [ 9] .rela.dyn         RELA             0000000000000410  00000410
       00000000000000c0  0000000000000018   A       5     0     8
  [10] .rela.plt         RELA             00000000000004d0  000004d0
       0000000000000018  0000000000000018  AI       5    22     8
  [11] .init             PROGBITS         00000000000004e8  000004e8
       0000000000000017  0000000000000000  AX       0     0     4
  [12] .plt              PROGBITS         0000000000000500  00000500
       0000000000000020  0000000000000010  AX       0     0     16
  [13] .plt.got          PROGBITS         0000000000000520  00000520
       0000000000000008  0000000000000008  AX       0     0     8
  [14] .text             PROGBITS         0000000000000530  00000530
       00000000000001a2  0000000000000000  AX       0     0     16
  [15] .fini             PROGBITS         00000000000006d4  000006d4
       0000000000000009  0000000000000000  AX       0     0     4
  [16] .rodata           PROGBITS         00000000000006e0  000006e0
       0000000000000010  0000000000000000   A       0     0     4
  [17] .eh_frame_hdr     PROGBITS         00000000000006f0  000006f0
       000000000000003c  0000000000000000   A       0     0     4
  [18] .eh_frame         PROGBITS         0000000000000730  00000730
       0000000000000108  0000000000000000   A       0     0     8
  [19] .init_array       INIT_ARRAY       0000000000200db8  00000db8
       0000000000000008  0000000000000008  WA       0     0     8
  [20] .fini_array       FINI_ARRAY       0000000000200dc0  00000dc0
       0000000000000008  0000000000000008  WA       0     0     8
  [21] .dynamic          DYNAMIC          0000000000200dc8  00000dc8
       00000000000001f0  0000000000000010  WA       6     0     8
  [22] .got              PROGBITS         0000000000200fb8  00000fb8
       0000000000000048  0000000000000008  WA       0     0     8
  [23] .data             PROGBITS         0000000000201000  00001000
       0000000000000010  0000000000000000  WA       0     0     8
  [24] .bss              NOBITS           0000000000201010  00001010
       0000000000000008  0000000000000000  WA       0     0     1
  [25] .comment          PROGBITS         0000000000000000  00001010
       0000000000000023  0000000000000001  MS       0     0     1
  [26] .symtab           SYMTAB           0000000000000000  00001038
       00000000000005e8  0000000000000018          27    43     8
  [27] .strtab           STRTAB           0000000000000000  00001620
       0000000000000204  0000000000000000           0     0     1
  [28] .shstrtab         STRTAB           0000000000000000  00001824
       00000000000000fe  0000000000000000           0     0     1
Key to Flags:
  W (write), A (alloc), X (execute), M (merge), S (strings), I (info),
  L (link order), O (extra OS processing required), G (group), T (TLS),
  C (compressed), x (unknown), o (OS specific), E (exclude),
  l (large), p (processor specific)

Es gibt keine Sektionsgruppen in dieser Datei.

Programm-Header:
  Typ            Offset             VirtAdr            PhysAdr
                 DateiGr            SpeiGr              Flags  Ausr.
  PHDR           0x0000000000000040 0x0000000000000040 0x0000000000000040
                 0x00000000000001f8 0x00000000000001f8  R E    0x8
  INTERP         0x0000000000000238 0x0000000000000238 0x0000000000000238
                 0x000000000000001c 0x000000000000001c  R      0x1
      [Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
  LOAD           0x0000000000000000 0x0000000000000000 0x0000000000000000
                 0x0000000000000838 0x0000000000000838  R E    0x200000
  LOAD           0x0000000000000db8 0x0000000000200db8 0x0000000000200db8
                 0x0000000000000258 0x0000000000000260  RW     0x200000
  DYNAMIC        0x0000000000000dc8 0x0000000000200dc8 0x0000000000200dc8
                 0x00000000000001f0 0x00000000000001f0  RW     0x8
  NOTE           0x0000000000000254 0x0000000000000254 0x0000000000000254
                 0x0000000000000044 0x0000000000000044  R      0x4
  GNU_EH_FRAME   0x00000000000006f0 0x00000000000006f0 0x00000000000006f0
                 0x000000000000003c 0x000000000000003c  R      0x4
  GNU_STACK      0x0000000000000000 0x0000000000000000 0x0000000000000000
                 0x0000000000000000 0x0000000000000000  RW     0x10
  GNU_RELRO      0x0000000000000db8 0x0000000000200db8 0x0000000000200db8
                 0x0000000000000248 0x0000000000000248  R      0x1

 Abbildung von Sektion nach Segment:
  Segmentsektionen...
   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 

Dynamic section at offset 0xdc8 contains 27 entries:
  Tag       Typ                          Name/Wert
 0x0000000000000001 (NEEDED)             Gemeinsame Bibliothek [libc.so.6]
 0x000000000000000c (INIT)               0x4e8
 0x000000000000000d (FINI)               0x6d4
 0x0000000000000019 (INIT_ARRAY)         0x200db8
 0x000000000000001b (INIT_ARRAYSZ)       8 (Bytes)
 0x000000000000001a (FINI_ARRAY)         0x200dc0
 0x000000000000001c (FINI_ARRAYSZ)       8 (Bytes)
 0x000000006ffffef5 (GNU_HASH)           0x298
 0x0000000000000005 (STRTAB)             0x360
 0x0000000000000006 (SYMTAB)             0x2b8
 0x000000000000000a (STRSZ)              130 (Bytes)
 0x000000000000000b (SYMENT)             24 (Bytes)
 0x0000000000000015 (DEBUG)              0x0
 0x0000000000000003 (PLTGOT)             0x200fb8
 0x0000000000000002 (PLTRELSZ)           24 (Bytes)
 0x0000000000000014 (PLTREL)             RELA
 0x0000000000000017 (JMPREL)             0x4d0
 0x0000000000000007 (RELA)               0x410
 0x0000000000000008 (RELASZ)             192 (Bytes)
 0x0000000000000009 (RELAENT)            24 (Bytes)
 0x000000000000001e (FLAGS)              BIND_NOW
 0x000000006ffffffb (FLAGS_1)            Flags: NOW PIE
 0x000000006ffffffe (VERNEED)            0x3f0
 0x000000006fffffff (VERNEEDNUM)         1
 0x000000006ffffff0 (VERSYM)             0x3e2
 0x000000006ffffff9 (RELACOUNT)          3
 0x0000000000000000 (NULL)               0x0

Relozierungssektion '.rela.dyn' an Offset 0x410 enhält 8 Einträge:
  Offset          Info           Typ            Sym.-Wert     Sym.-Name+Summand
000000200db8  000000000008 R_X86_64_RELATIVE                    630
000000200dc0  000000000008 R_X86_64_RELATIVE                    5f0
000000201008  000000000008 R_X86_64_RELATIVE                    201008
000000200fd8  000100000006 R_X86_64_GLOB_DAT 0000000000000000 _ITM_deregisterTMClone + 0
000000200fe0  000300000006 R_X86_64_GLOB_DAT 0000000000000000 __libc_start_main@GLIBC_2.2.5 + 0
000000200fe8  000400000006 R_X86_64_GLOB_DAT 0000000000000000 __gmon_start__ + 0
000000200ff0  000500000006 R_X86_64_GLOB_DAT 0000000000000000 _ITM_registerTMCloneTa + 0
000000200ff8  000600000006 R_X86_64_GLOB_DAT 0000000000000000 __cxa_finalize@GLIBC_2.2.5 + 0

Relozierungssektion '.rela.plt' an Offset 0x4d0 enhält 1 Einträge:
  Offset          Info           Typ            Sym.-Wert     Sym.-Name+Summand
000000200fd0  000200000007 R_X86_64_JUMP_SLO 0000000000000000 puts@GLIBC_2.2.5 + 0

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

Symboltabelle ‚.dynsym‛ enthält 7 Einträge:
   Num:    Wert           Size Type    Bind   Vis      Ndx Name
     0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND 
     1: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND _ITM_deregisterTMCloneTab
     2: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND puts@GLIBC_2.2.5 (2)
     3: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __libc_start_main@GLIBC_2.2.5 (2)
     4: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND __gmon_start__
     5: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND _ITM_registerTMCloneTable
     6: 0000000000000000     0 FUNC    WEAK   DEFAULT  UND __cxa_finalize@GLIBC_2.2.5 (2)

Symboltabelle ‚.symtab‛ enthält 63 Einträge:
   Num:    Wert           Size Type    Bind   Vis      Ndx Name
     0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND 
     1: 0000000000000238     0 SECTION LOCAL  DEFAULT    1 
     2: 0000000000000254     0 SECTION LOCAL  DEFAULT    2 
     3: 0000000000000274     0 SECTION LOCAL  DEFAULT    3 
     4: 0000000000000298     0 SECTION LOCAL  DEFAULT    4 
     5: 00000000000002b8     0 SECTION LOCAL  DEFAULT    5 
     6: 0000000000000360     0 SECTION LOCAL  DEFAULT    6 
     7: 00000000000003e2     0 SECTION LOCAL  DEFAULT    7 
     8: 00000000000003f0     0 SECTION LOCAL  DEFAULT    8 
     9: 0000000000000410     0 SECTION LOCAL  DEFAULT    9 
    10: 00000000000004d0     0 SECTION LOCAL  DEFAULT   10 
    11: 00000000000004e8     0 SECTION LOCAL  DEFAULT   11 
    12: 0000000000000500     0 SECTION LOCAL  DEFAULT   12 
    13: 0000000000000520     0 SECTION LOCAL  DEFAULT   13 
    14: 0000000000000530     0 SECTION LOCAL  DEFAULT   14 
    15: 00000000000006d4     0 SECTION LOCAL  DEFAULT   15 
    16: 00000000000006e0     0 SECTION LOCAL  DEFAULT   16 
    17: 00000000000006f0     0 SECTION LOCAL  DEFAULT   17 
    18: 0000000000000730     0 SECTION LOCAL  DEFAULT   18 
    19: 0000000000200db8     0 SECTION LOCAL  DEFAULT   19 
    20: 0000000000200dc0     0 SECTION LOCAL  DEFAULT   20 
    21: 0000000000200dc8     0 SECTION LOCAL  DEFAULT   21 
    22: 0000000000200fb8     0 SECTION LOCAL  DEFAULT   22 
    23: 0000000000201000     0 SECTION LOCAL  DEFAULT   23 
    24: 0000000000201010     0 SECTION LOCAL  DEFAULT   24 
    25: 0000000000000000     0 SECTION LOCAL  DEFAULT   25 
    26: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS crtstuff.c
    27: 0000000000000560     0 FUNC    LOCAL  DEFAULT   14 deregister_tm_clones
    28: 00000000000005a0     0 FUNC    LOCAL  DEFAULT   14 register_tm_clones
    29: 00000000000005f0     0 FUNC    LOCAL  DEFAULT   14 __do_global_dtors_aux
    30: 0000000000201010     1 OBJECT  LOCAL  DEFAULT   24 completed.7632
    31: 0000000000200dc0     0 OBJECT  LOCAL  DEFAULT   20 __do_global_dtors_aux_fin
    32: 0000000000000630     0 FUNC    LOCAL  DEFAULT   14 frame_dummy
    33: 0000000000200db8     0 OBJECT  LOCAL  DEFAULT   19 __frame_dummy_init_array_
    34: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS hworld.c
    35: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS crtstuff.c
    36: 0000000000000834     0 OBJECT  LOCAL  DEFAULT   18 __FRAME_END__
    37: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS 
    38: 0000000000200dc0     0 NOTYPE  LOCAL  DEFAULT   19 __init_array_end
    39: 0000000000200dc8     0 OBJECT  LOCAL  DEFAULT   21 _DYNAMIC
    40: 0000000000200db8     0 NOTYPE  LOCAL  DEFAULT   19 __init_array_start
    41: 00000000000006f0     0 NOTYPE  LOCAL  DEFAULT   17 __GNU_EH_FRAME_HDR
    42: 0000000000200fb8     0 OBJECT  LOCAL  DEFAULT   22 _GLOBAL_OFFSET_TABLE_
    43: 00000000000006d0     2 FUNC    GLOBAL DEFAULT   14 __libc_csu_fini
    44: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND _ITM_deregisterTMCloneTab
    45: 0000000000201000     0 NOTYPE  WEAK   DEFAULT   23 data_start
    46: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND puts@@GLIBC_2.2.5
    47: 0000000000201010     0 NOTYPE  GLOBAL DEFAULT   23 _edata
    48: 00000000000006d4     0 FUNC    GLOBAL DEFAULT   15 _fini
    49: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __libc_start_main@@GLIBC_
    50: 0000000000201000     0 NOTYPE  GLOBAL DEFAULT   23 __data_start
    51: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND __gmon_start__
    52: 0000000000201008     0 OBJECT  GLOBAL HIDDEN    23 __dso_handle
    53: 00000000000006e0     4 OBJECT  GLOBAL DEFAULT   16 _IO_stdin_used
    54: 0000000000000660   101 FUNC    GLOBAL DEFAULT   14 __libc_csu_init
    55: 0000000000201018     0 NOTYPE  GLOBAL DEFAULT   24 _end
    56: 0000000000000530    43 FUNC    GLOBAL DEFAULT   14 _start
    57: 0000000000201010     0 NOTYPE  GLOBAL DEFAULT   24 __bss_start
    58: 000000000000063a    23 FUNC    GLOBAL DEFAULT   14 main
    59: 0000000000201010     0 OBJECT  GLOBAL HIDDEN    23 __TMC_END__
    60: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND _ITM_registerTMCloneTable
    61: 0000000000000000     0 FUNC    WEAK   DEFAULT  UND __cxa_finalize@@GLIBC_2.2
    62: 00000000000004e8     0 FUNC    GLOBAL DEFAULT   11 _init

Version symbols section '.gnu.version' contains 7 entries:
 Adr: 00000000000003e2  Offset: 0x0003e2  Link: 5 (.dynsym)
  000:   0 (*lokal*)       0 (*lokal*)       2 (GLIBC_2.2.5)   2 (GLIBC_2.2.5)
  004:   0 (*lokal*)       0 (*lokal*)       2 (GLIBC_2.2.5)

Version needs section '.gnu.version_r' contains 1 entries:
 Adr:  0x00000000000003f0  Offset: 0x0003f0  Link: 6 (.dynstr)
  000000: Version: 1  Datei: libc.so.6  Zähler: 1
  0x0010:   Name: GLIBC_2.2.5  Flags: nichts  Version: 2

Displaying notes found in: .note.ABI-tag
  Besitzer             Datengröße       Description
  GNU                  0x00000010       NT_GNU_ABI_TAG (ABI version tag)
    OS: Linux, ABI: 3.2.0

Displaying notes found in: .note.gnu.build-id
  Besitzer             Datengröße       Description
  GNU                  0x00000014       NT_GNU_BUILD_ID (unique build ID bitstring)
    Build-ID: 468dedcf7669cbd1fbd50463fe688ed79889550b
mit ld gelinkt:

Code: Alles auswählen

xin@cypher:~/try/hworld$ readelf -a hworld
ELF-Header:
  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 
  Klasse:                            ELF64
  Daten:                             2er-Komplement, Little-Endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI-Version:                       0
  Typ:                               EXEC (ausführbare Datei)
  Maschine:                          Advanced Micro Devices X86-64
  Version:                           0x1
  Einstiegspunktadresse:               0x4003a0
  Beginn der Programm-Header:          64 (Bytes in Datei)
  Beginn der Sektions-header:          5600 (Bytes in Datei)
  Flags:                             0x0
  Größe dieses Headers:              64 (Byte)
  Größe der Programm-Header:         56 (Byte)
  Number of program headers:         8
  Größe der Sektions-Header:         64 (bytes)
  Anzahl der Sektions-Header:        24
  Sektions-Header Stringtabellen-Index: 23

Sektions-Header:
  [Nr] Name              Typ              Adresse           Offset
       Größe             Eintragsgröße    Flags  Link  Info  Ausr.
  [ 0]                   NULL             0000000000000000  00000000
       0000000000000000  0000000000000000           0     0     0
  [ 1] .interp           PROGBITS         0000000000400200  00000200
       000000000000000f  0000000000000000   A       0     0     1
  [ 2] .note.ABI-tag     NOTE             0000000000400210  00000210
       0000000000000020  0000000000000000   A       0     0     4
  [ 3] .hash             HASH             0000000000400230  00000230
       0000000000000024  0000000000000004   A       4     0     8
  [ 4] .dynsym           DYNSYM           0000000000400258  00000258
       0000000000000060  0000000000000018   A       5     1     8
  [ 5] .dynstr           STRTAB           00000000004002b8  000002b8
       000000000000003d  0000000000000000   A       0     0     1
  [ 6] .gnu.version      VERSYM           00000000004002f6  000002f6
       0000000000000008  0000000000000002   A       4     0     2
  [ 7] .gnu.version_r    VERNEED          0000000000400300  00000300
       0000000000000020  0000000000000000   A       5     1     8
  [ 8] .rela.dyn         RELA             0000000000400320  00000320
       0000000000000030  0000000000000018   A       4     0     8
  [ 9] .rela.plt         RELA             0000000000400350  00000350
       0000000000000018  0000000000000018  AI       4    18     8
  [10] .init             PROGBITS         0000000000400368  00000368
       0000000000000017  0000000000000000  AX       0     0     4
  [11] .plt              PROGBITS         0000000000400380  00000380
       0000000000000020  0000000000000010  AX       0     0     16
  [12] .text             PROGBITS         00000000004003a0  000003a0
       00000000000000c2  0000000000000000  AX       0     0     16
  [13] .fini             PROGBITS         0000000000400464  00000464
       0000000000000009  0000000000000000  AX       0     0     4
  [14] .rodata           PROGBITS         0000000000400470  00000470
       0000000000000010  0000000000000000   A       0     0     4
  [15] .eh_frame         PROGBITS         0000000000400480  00000480
       00000000000000ec  0000000000000000   A       0     0     8
  [16] .dynamic          DYNAMIC          0000000000600e60  00000e60
       0000000000000190  0000000000000010  WA       5     0     8
  [17] .got              PROGBITS         0000000000600ff0  00000ff0
       0000000000000010  0000000000000008  WA       0     0     8
  [18] .got.plt          PROGBITS         0000000000601000  00001000
       0000000000000020  0000000000000008  WA       0     0     8
  [19] .data             PROGBITS         0000000000601020  00001020
       0000000000000004  0000000000000000  WA       0     0     1
  [20] .comment          PROGBITS         0000000000000000  00001024
       0000000000000023  0000000000000001  MS       0     0     1
  [21] .symtab           SYMTAB           0000000000000000  00001048
       00000000000003f0  0000000000000018          22    27     8
  [22] .strtab           STRTAB           0000000000000000  00001438
       00000000000000e1  0000000000000000           0     0     1
  [23] .shstrtab         STRTAB           0000000000000000  00001519
       00000000000000c1  0000000000000000           0     0     1
Key to Flags:
  W (write), A (alloc), X (execute), M (merge), S (strings), I (info),
  L (link order), O (extra OS processing required), G (group), T (TLS),
  C (compressed), x (unknown), o (OS specific), E (exclude),
  l (large), p (processor specific)

Es gibt keine Sektionsgruppen in dieser Datei.

Programm-Header:
  Typ            Offset             VirtAdr            PhysAdr
                 DateiGr            SpeiGr              Flags  Ausr.
  PHDR           0x0000000000000040 0x0000000000400040 0x0000000000400040
                 0x00000000000001c0 0x00000000000001c0  R E    0x8
  INTERP         0x0000000000000200 0x0000000000400200 0x0000000000400200
                 0x000000000000000f 0x000000000000000f  R      0x1
      [Requesting program interpreter: /lib/ld64.so.1]
  LOAD           0x0000000000000000 0x0000000000400000 0x0000000000400000
                 0x000000000000056c 0x000000000000056c  R E    0x200000
  LOAD           0x0000000000000e60 0x0000000000600e60 0x0000000000600e60
                 0x00000000000001c4 0x00000000000001c4  RW     0x200000
  DYNAMIC        0x0000000000000e60 0x0000000000600e60 0x0000000000600e60
                 0x0000000000000190 0x0000000000000190  RW     0x8
  NOTE           0x0000000000000210 0x0000000000400210 0x0000000000400210
                 0x0000000000000020 0x0000000000000020  R      0x4
  GNU_STACK      0x0000000000000000 0x0000000000000000 0x0000000000000000
                 0x0000000000000000 0x0000000000000000  RW     0x10
  GNU_RELRO      0x0000000000000e60 0x0000000000600e60 0x0000000000600e60
                 0x00000000000001a0 0x00000000000001a0  R      0x1

 Abbildung von Sektion nach Segment:
  Segmentsektionen...
   00     
   01     .interp 
   02     .interp .note.ABI-tag .hash .dynsym .dynstr .gnu.version .gnu.version_r .rela.dyn .rela.plt .init .plt .text .fini .rodata .eh_frame 
   03     .dynamic .got .got.plt .data 
   04     .dynamic 
   05     .note.ABI-tag 
   06     
   07     .dynamic .got 

Dynamic section at offset 0xe60 contains 20 entries:
  Tag       Typ                          Name/Wert
 0x0000000000000001 (NEEDED)             Gemeinsame Bibliothek [libc.so.6]
 0x000000000000000c (INIT)               0x400368
 0x000000000000000d (FINI)               0x400464
 0x0000000000000004 (HASH)               0x400230
 0x0000000000000005 (STRTAB)             0x4002b8
 0x0000000000000006 (SYMTAB)             0x400258
 0x000000000000000a (STRSZ)              61 (Bytes)
 0x000000000000000b (SYMENT)             24 (Bytes)
 0x0000000000000015 (DEBUG)              0x0
 0x0000000000000003 (PLTGOT)             0x601000
 0x0000000000000002 (PLTRELSZ)           24 (Bytes)
 0x0000000000000014 (PLTREL)             RELA
 0x0000000000000017 (JMPREL)             0x400350
 0x0000000000000007 (RELA)               0x400320
 0x0000000000000008 (RELASZ)             48 (Bytes)
 0x0000000000000009 (RELAENT)            24 (Bytes)
 0x000000006ffffffe (VERNEED)            0x400300
 0x000000006fffffff (VERNEEDNUM)         1
 0x000000006ffffff0 (VERSYM)             0x4002f6
 0x0000000000000000 (NULL)               0x0

Relozierungssektion '.rela.dyn' an Offset 0x320 enhält 2 Einträge:
  Offset          Info           Typ            Sym.-Wert     Sym.-Name+Summand
000000600ff0  000200000006 R_X86_64_GLOB_DAT 0000000000000000 __libc_start_main@GLIBC_2.2.5 + 0
000000600ff8  000300000006 R_X86_64_GLOB_DAT 0000000000000000 __gmon_start__ + 0

Relozierungssektion '.rela.plt' an Offset 0x350 enhält 1 Einträge:
  Offset          Info           Typ            Sym.-Wert     Sym.-Name+Summand
000000601018  000100000007 R_X86_64_JUMP_SLO 0000000000000000 puts@GLIBC_2.2.5 + 0

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

Symboltabelle ‚.dynsym‛ enthält 4 Einträge:
   Num:    Wert           Size Type    Bind   Vis      Ndx Name
     0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND 
     1: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND puts@GLIBC_2.2.5 (2)
     2: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __libc_start_main@GLIBC_2.2.5 (2)
     3: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND __gmon_start__

Symboltabelle ‚.symtab‛ enthält 42 Einträge:
   Num:    Wert           Size Type    Bind   Vis      Ndx Name
     0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND 
     1: 0000000000400200     0 SECTION LOCAL  DEFAULT    1 
     2: 0000000000400210     0 SECTION LOCAL  DEFAULT    2 
     3: 0000000000400230     0 SECTION LOCAL  DEFAULT    3 
     4: 0000000000400258     0 SECTION LOCAL  DEFAULT    4 
     5: 00000000004002b8     0 SECTION LOCAL  DEFAULT    5 
     6: 00000000004002f6     0 SECTION LOCAL  DEFAULT    6 
     7: 0000000000400300     0 SECTION LOCAL  DEFAULT    7 
     8: 0000000000400320     0 SECTION LOCAL  DEFAULT    8 
     9: 0000000000400350     0 SECTION LOCAL  DEFAULT    9 
    10: 0000000000400368     0 SECTION LOCAL  DEFAULT   10 
    11: 0000000000400380     0 SECTION LOCAL  DEFAULT   11 
    12: 00000000004003a0     0 SECTION LOCAL  DEFAULT   12 
    13: 0000000000400464     0 SECTION LOCAL  DEFAULT   13 
    14: 0000000000400470     0 SECTION LOCAL  DEFAULT   14 
    15: 0000000000400480     0 SECTION LOCAL  DEFAULT   15 
    16: 0000000000600e60     0 SECTION LOCAL  DEFAULT   16 
    17: 0000000000600ff0     0 SECTION LOCAL  DEFAULT   17 
    18: 0000000000601000     0 SECTION LOCAL  DEFAULT   18 
    19: 0000000000601020     0 SECTION LOCAL  DEFAULT   19 
    20: 0000000000000000     0 SECTION LOCAL  DEFAULT   20 
    21: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS hworld.c
    22: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS 
    23: 0000000000600e60     0 NOTYPE  LOCAL  DEFAULT   16 __init_array_end
    24: 0000000000600e60     0 OBJECT  LOCAL  DEFAULT   16 _DYNAMIC
    25: 0000000000600e60     0 NOTYPE  LOCAL  DEFAULT   16 __init_array_start
    26: 0000000000601000     0 OBJECT  LOCAL  DEFAULT   18 _GLOBAL_OFFSET_TABLE_
    27: 0000000000400460     2 FUNC    GLOBAL DEFAULT   12 __libc_csu_fini
    28: 0000000000601020     0 NOTYPE  WEAK   DEFAULT   19 data_start
    29: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND puts@@GLIBC_2.2.5
    30: 0000000000601024     0 NOTYPE  GLOBAL DEFAULT   19 _edata
    31: 0000000000400464     0 FUNC    GLOBAL DEFAULT   13 _fini
    32: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __libc_start_main@@GLIBC_
    33: 0000000000601020     0 NOTYPE  GLOBAL DEFAULT   19 __data_start
    34: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND __gmon_start__
    35: 0000000000400470     4 OBJECT  GLOBAL DEFAULT   14 _IO_stdin_used
    36: 00000000004003f0   101 FUNC    GLOBAL DEFAULT   12 __libc_csu_init
    37: 0000000000601028     0 NOTYPE  GLOBAL DEFAULT   19 _end
    38: 00000000004003a0    43 FUNC    GLOBAL DEFAULT   12 _start
    39: 0000000000601024     0 NOTYPE  GLOBAL DEFAULT   19 __bss_start
    40: 00000000004003cb    23 FUNC    GLOBAL DEFAULT   12 main
    41: 0000000000400368     0 FUNC    GLOBAL DEFAULT   10 _init

Histogramm der Bucketlistenl-Länge (von insgesamt 3 Buckets):
 Länge   Nummer     % von insg. Abdeckung
      0  2          ( 66.7%)
      1  0          (  0.0%)      0.0%
      2  1          ( 33.3%)    100.0%

Version symbols section '.gnu.version' contains 4 entries:
 Adr: 00000000004002f6  Offset: 0x0002f6  Link: 4 (.dynsym)
  000:   0 (*lokal*)       2 (GLIBC_2.2.5)   2 (GLIBC_2.2.5)   0 (*lokal*)    

Version needs section '.gnu.version_r' contains 1 entries:
 Adr:  0x0000000000400300  Offset: 0x000300  Link: 5 (.dynstr)
  000000: Version: 1  Datei: libc.so.6  Zähler: 1
  0x0010:   Name: GLIBC_2.2.5  Flags: nichts  Version: 2

Displaying notes found in: .note.ABI-tag
  Besitzer             Datengröße       Description
  GNU                  0x00000010       NT_GNU_ABI_TAG (ABI version tag)
    OS: Linux, ABI: 3.2.0
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten