Suche Linux-Anschluss im Raum Bi-Sennestadt

Jan 'RedBully' Seiffert redbully at cc.fh-luh.de
Tue Apr 24 21:09:37 CEST 2007


Jan 'RedBully' Seiffert wrote:
> Pfeiffer wrote:
[snip]
>> Der Adressbereich wird 16MB betragen und sollte ab Adresse $00000000 bis 
>> $010000000 gemapped werden.
[snip]
> 6) Das kann der Emulator theoretisch auch an Addresse $00000..., da ist
> nur ein Problem: dort ist normalerweise das Programm/der Emulatorcode
> selbst (bzw. ein bischen oberhalb der Addresse)
> 

Hmmm, OK, i korregiere mich:

Nach Linux-ABI starten Programme ab der Addresse 0x08048000, das ist so
in den Default-Linkerscripten hinterlegt (objdump -f -p
/bin/irgendeinprogramm). Das ueberschneidet sich nur mit deinen 16 MB.

Aber wer sagt, das man das nicht aendern koennte?
Man nehme das default Linkerscript (bei mir unter
/usr/lib/binutils/$VERSION/ldscripts/elf_i386.x), kopiere es zu seinem
Source, aendere die Startadresse und:

gcc -o hello hello.c -Wl,-T,hello.x

man erhaelt:

hello:     file format elf32-i386
architecture: i386, flags 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
start address 0x10000300

Program Header:
    PHDR off    0x00000034 vaddr 0x10000034 paddr 0x10000034 align 2**2
         filesz 0x00000100 memsz 0x00000100 flags r-x
  INTERP off    0x00000134 vaddr 0x10000134 paddr 0x10000134 align 2**0
         filesz 0x00000013 memsz 0x00000013 flags r--
    LOAD off    0x00000000 vaddr 0x10000000 paddr 0x10000000 align 2**12
         filesz 0x0000049c memsz 0x0000049c flags r-x
    LOAD off    0x0000049c vaddr 0x1000149c paddr 0x1000149c align 2**12
         filesz 0x00000104 memsz 0x00000108 flags rw-
 DYNAMIC off    0x000004b0 vaddr 0x100014b0 paddr 0x100014b0 align 2**2
         filesz 0x000000c8 memsz 0x000000c8 flags rw-
    NOTE off    0x00000148 vaddr 0x10000148 paddr 0x10000148 align 2**2
         filesz 0x00000020 memsz 0x00000020 flags r--
   STACK off    0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**2
         filesz 0x00000000 memsz 0x00000000 flags rw-
PAX_FLAGS off    0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**2
         filesz 0x00000000 memsz 0x00000000 flags --- 2800

Dynamic Section:
  NEEDED      libc.so.6
  INIT        0x100002a0
  FINI        0x1000046c
  HASH        0x10000168
  STRTAB      0x100001f4
  SYMTAB      0x10000194
  STRSZ       0x5e
  SYMENT      0x10
  DEBUG       0x0
  PLTGOT      0x1000157c
  PLTRELSZ    0x18
  PLTREL      0x11
  JMPREL      0x10000288
  REL         0x10000280
  RELSZ       0x8
  RELENT      0x8
  VERNEED     0x10000260
  VERNEEDNUM  0x1
  VERSYM      0x10000252

Aha, die untersten 16MB sind frei. Nun kann man sich was dahin mappen.
Es laeuft sogar.

Nur eins ist damit klar: man verlaesst alle Standard-Pfade, kann gut
sein, das damit etwas/eine lib nicht klar kommt.
Und nebenbei ist man nach dem mappen nicht mehr dagegen gefeit Unsinn
mit einem NULL-Pointer zu machen...

Gruss
	Jan


-- 
pod* a;
pott* b;
a = (pod *)b;
Ein echter Podcast :-D



More information about the Linux mailing list