Fw: Suche Linux-Anschluss im Raum Bi-Sennestadt
Jan 'RedBully' Seiffert wrote:
Der Adressbereich wird 16MB betragen und sollte ab Adresse $00000000 bis $010000000 gemapped werden. [snip]
Pfeiffer wrote: [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...
Da geht es schon los. Ich habe kein richtiges Linux installiert, noch ist mir bekannt welches für das entwickeln das richtige ist. Welche Entwicklerumgebung installiere ich und wie installiere ich Sie. Deshalb wäre ein "über die Schulter schauen" mal ganz hilfreich, damit ich überhaupt den Fuß in die Tür bekomme. Für die Umgebung hatte ich mir überlegt VirtualPC5.2 auf meinem XP-System zu verwenden. Plattmachen, umpartitionieren kommt aus familiären Gründen nicht in Frage. Mal eine generelle Verständnisfrage, wenn ich es richtig verstehe laufen die kompilierten Programme nicht auf jeder x-beliebigen Distribution, oder liege ich damit falsch? Das installieren eines Programmes unter Linux erscheiont mir immer wie eine auf die Umgebung angepasste neue Kompilierung. Wobei der Beispielheader ziemlich Amigaähnlich vorkommt. Gruß Andre
Teilnehmer (3)
-
Jan 'RedBully' Seiffert
-
Jan-Benedict Glaw
-
Pfeiffer