P
phs
Neues Mitglied
Thread Starter
- Dabei seit
- 09.06.2006
- Beiträge
- 14
- Reaktionspunkte
- 0
Hallo,
wie kann man dem Linker in Mac OS X 10.4.6 beibringen, dass er beim Linken eines Programms eine bestimmte Basisadresse verwendet?
Ich habe ein Programm welches mmap(2) verwendet um einen bestimmten Speicherbereich verwenden zu können. Dieser Speicherbereich hängt von der Eingabe ab liegt aber immer im Bereich von ca. 0x2000 bis ca. 0xF000 und ist ansonsten unveränderlich.
Wenn ich nun mmap(2) dazu bringe mir einen Speicherbereich beginnend z.B. an 0x2000 zu mappen, stelle ich fest, das dort eigentlich schon mein eigener Code geladen ist. Wenn ich dann trotzdem in dem Bereich Veränderungen vornehme stürzt mein Code natürlich ab sobald in die Funktion gesprungen wird, die an 0x2000 liegt.
Ich denke die Lösung des Problems könnte sein, den Linker dazu zu bringen meinen eigenen Code nicht im Bereich von ca. 0x2000 - 0xF000 zu linken, sondern eine Basisadresse im oberen Speicherbereich zu verwenden. Auf x86-Systemen (Linux, FreeBSD) werden die Images im Bereich um 0x800000 gelinkt und mein Code funktioniert wunderbar.
Hoffentlich konnte ich das Problem nun verständlich machen. Für jeden Hinweis bin ich dankbar.
wie kann man dem Linker in Mac OS X 10.4.6 beibringen, dass er beim Linken eines Programms eine bestimmte Basisadresse verwendet?
Ich habe ein Programm welches mmap(2) verwendet um einen bestimmten Speicherbereich verwenden zu können. Dieser Speicherbereich hängt von der Eingabe ab liegt aber immer im Bereich von ca. 0x2000 bis ca. 0xF000 und ist ansonsten unveränderlich.
Wenn ich nun mmap(2) dazu bringe mir einen Speicherbereich beginnend z.B. an 0x2000 zu mappen, stelle ich fest, das dort eigentlich schon mein eigener Code geladen ist. Wenn ich dann trotzdem in dem Bereich Veränderungen vornehme stürzt mein Code natürlich ab sobald in die Funktion gesprungen wird, die an 0x2000 liegt.
Ich denke die Lösung des Problems könnte sein, den Linker dazu zu bringen meinen eigenen Code nicht im Bereich von ca. 0x2000 - 0xF000 zu linken, sondern eine Basisadresse im oberen Speicherbereich zu verwenden. Auf x86-Systemen (Linux, FreeBSD) werden die Images im Bereich um 0x800000 gelinkt und mein Code funktioniert wunderbar.
Hoffentlich konnte ich das Problem nun verständlich machen. Für jeden Hinweis bin ich dankbar.