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