Autor Thema: FreeBasic: Software Multitasking  (Gelesen 16340 mal)

TheThing

  • Beiträge: 105
    • Profil anzeigen
Gespeichert
« Antwort #20 am: 03. June 2009, 12:29 »
Ok danke.
Also, ich erstelle meine ELF-Datei so:

Zitat
as -o test.o test.asm
ld test.o -melf_i386 -o test.elf

Die test.asm hat folgenden Inhalt:
.intel_syntax noprefix
.global _start
_start:
x:
int 0x30
jmp x

Laut meinem Kernel hat das Programm dann 1 Program-Header-Entry und 5 Section-Header-Entries, aber das PH-Segment ist angeblich kein PT_Load-Segment. Als e_entry hab ich dann 0x8048054.

Ich glaube irgendwie, dass ich noch irgendeinen kleinen dummen Fehler in meinem ELF-Code habe. Mein ELF-Code liegt hier: http://darkinsanity.netne.net/nerdpole/source/ELF.bi
Der Code ist noch nicht ganz fertig, z.B. mappt er im Moment einfach die Segmente in den Speicher, anstatt sie zu kopieren.
Ich hab schon probiert an die "type"s ein "FIELD=1" anzuhängen (was gleichbedeutend mit einem "__attribute__ ((packed))" ist), und ich hab das schon weggelassen, aber es hilft alles nichts.

"objdump -x test.elf" gibt aus:
Zitat
test.elf:     file format elf32-i386
test.elf
architecture: i386, flags 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
start address 0x08048054

Program Header:
    LOAD off    0x00000000 vaddr 0x08048000 paddr 0x08048000 align 2**12
         filesz 0x00000058 memsz 0x00000058 flags r-x

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         00000004  08048054  08048054  00000054  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
SYMBOL TABLE:
08048054 l    d  .text   00000000 .text
08048054 l       .text   00000000 x
08048054 g       .text   00000000 _start
08049058 g       *ABS*   00000000 __bss_start
08049058 g       *ABS*   00000000 _edata
08049058 g       *ABS*   00000000 _end

Anscheinend hat das Program doch ein PT_Load-Segment. Aber wieso behauptet mein Code das Gegenteil?
Mein Code sagt ja auch das vaddr 0 wäre. Das stimmt ja auch nicht. Ich bin echt ratlos...
« Letzte Änderung: 03. June 2009, 12:36 von TheThing »

MNemo

  • Beiträge: 547
    • Profil anzeigen
Gespeichert
« Antwort #21 am: 03. June 2009, 12:39 »
Der Link ist tot.
„Wichtig ist nicht, besser zu sein als alle anderen. Wichtig ist, besser zu sein als du gestern warst!“

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #22 am: 03. June 2009, 12:39 »
Laut meinem Kernel hat das Programm dann 1 Program-Header-Entry und 5 Section-Header-Entries, aber das PH-Segment ist angeblich kein PT_Load-Segment. Als e_entry hab ich dann 0x8048054.
Sollte das nicht auch so sein? Man muss ja nur die Segmente laden, wo Code oder Daten drin sind, um ein Programm auszuführen. Der Rest ist ja nur Overhead in Form von Headern. Dass man die irgendwie in den Speicher laden muss, um nachzuschauen, was drin steht is klar, aber dafür kriegen die kein Flag.
Dieser Text wird unter jedem Beitrag angezeigt.

TheThing

  • Beiträge: 105
    • Profil anzeigen
Gespeichert
« Antwort #23 am: 03. June 2009, 12:55 »
Sorry, Link sollte jetzt gehen.

Ich verstehe nicht was du meinst.
Ich denke, ich muss nur die PT_load Segmente in den Speicher laden? Dort sind doch dann die wichtigen Sachen drin?

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #24 am: 03. June 2009, 15:43 »
Damit meine ich, dass ein einfacher ELF-Lader, erstmal die komplette Datei in den Speicher lädt, bevor er schaut, welche Sektionen Code und Daten sind.
Dieser Text wird unter jedem Beitrag angezeigt.

TheThing

  • Beiträge: 105
    • Profil anzeigen
Gespeichert
« Antwort #25 am: 04. June 2009, 11:53 »
Achso.
Ich hab den Fehler durch Zufall gefunden. Ich hab an der Stelle, an der ich die Adresse der PH-Entries berechnet habe, mit Pointern anstatt mit Zahlen gerechnet, und das geht ganz übel aus. Ein paar "cast"s eingebaut und schon funktionierts.  :mrgreen:

TheThing

  • Beiträge: 105
    • Profil anzeigen
Gespeichert
« Antwort #26 am: 06. June 2009, 16:17 »
Da ich das mit den ELF-Dateien hingekriegt hab, hab ich auch ein Tutorial geschrieben: http://lowlevel.brainsware.org/wiki/index.php/ELF_Tutorial
Ich werde es vielleicht noch mal überarbeiten, aber ich denke es ist hilfreich für Leute die noch keine Ahnung davon haben.

 

Einloggen