Autor Thema: Frage zur .data-Sektion  (Gelesen 2006 mal)

ChristianF

  • Beiträge: 296
    • Profil anzeigen
    • DeutschOS - Betriebssystem Projekt
Gespeichert
« am: 24. October 2010, 15:58 »
Moin moin...
ich beschäftige mich seit längerem mal wieder mit dem Thema und habe direkt ein Problem, bzw. eine Frage... :roll:
 
Wie sieht es mit der Sektion .data aus? Muss diese immer da sein? Könnte das nicht existieren der Sektion .data eventuell auch mit einem Fehler im Linkerscript zusammen hängen?
 
mein objdump sieht nämlich so aus, und das hat mich doch etwas verwirrt, da nur .text und .bss vorhanden sind:
kernel.elf:     file format elf32-i386
kernel.elf
architecture: i386, flags 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
start address 0x0010000c

Program Header:
    LOAD off    0x00001000 vaddr 0x00100000 paddr 0x00100000 align 2**12
         filesz 0x0000002c memsz 0x00002030 flags rwx
   STACK off    0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**2
         filesz 0x00000000 memsz 0x00000000 flags rwx

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         0000002c  00100000  00100000  00001000  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .bss          00002004  0010002c  0010002c  0000102c  2**2
                  ALLOC
SYMBOL TABLE:
00100000 l    d  .text  00000000 .text
0010002c l    d  .bss   00000000 .bss
0010202c l       .bss   00000000 _sys_stack
00100019 l       .text  00000000 stop
00000000 l    df *ABS*  00000000 init.c
00100000 g       *ABS*  00000000 kernel_phys_start_address
0010002c g       .bss   00000000 _sbss
00102030 g       *ABS*  00000000 kernel_end_address
00102030 g       .bss   00000000 _ebss
00100000 g       *ABS*  00000000 KERNEL_VMA
00000000 g       *ABS*  00000000 KERNEL_VOFFSET
00002030 g       *ABS*  00000000 kernel_size
00100000 g       *ABS*  00000000 kernel_start_address
00100000 g       *ABS*  00000000 KERNEL_LMA
0010202c g     O .bss   00000004 globalData
0010000c g       .text  00000000 loader
00102030 g       *ABS*  00000000 kernel_phys_end_address
0010001c g     F .text  00000010 vKernelInit

Viel ist nicht da. Es gibt eine C-Funktion, die nichts macht außer einer Endlosschleife und einen Startup-Code, der diese C-Funktion lädt...
 
Grüße Christian

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 24. October 2010, 16:28 »
Es könnte natürlich ein Fehler im Linkerskript sein. Aber das halte ich erstmal für unwahrscheinlich. In der Sektion .data landen initialisierte Variablen. Nicht initialisierte Variablen oder mit 0 initialisierte Variablen landen in .bss. Erst wenn du initialisierte Variablen hast, solltest du dir Gedanken über den Verbleib der Sektion machen.
Dieser Text wird unter jedem Beitrag angezeigt.

 

Einloggen