Gibt es eine Möglichkeit, den Zielbereich aller konstanten Zeiger zu ändern? Für mich ist die Option mit 'attibute' nicht in Ordnung, weil ich eine Lösung brauche, die ohne Änderungen im Quellcode nicht funktioniert.Konstante Zeiger in verschiedenen Abschnitten GCC
Hier Beispiel:
char * myString = "Some string to print";
Und wie wir wissen, myString
in der .data und verweist auf die .rodata gespeichert. Das System initialisiert es, indem es es beim Start der Anwendung aus der Elf-Datei kopiert. Aber es sind nur Rohdaten, es kann nicht analysiert werden. Das Problem ist, dass, wenn wir keine MMU haben und wir versuchen, -fPIC und .got zu verwenden, der Zeiger das .got nicht verwendet, also ist es icorrect.
„Ich brauche eine Lösung, die ohne Änderungen in der Quelle nicht funktionieren“ Sind Sie sicher? Bei einer Schätzung "Ich brauche eine Lösung, die ohne Änderungen in der Quelle funktioniert". – Yunnosch
Vielleicht versuchen, ein benutzerdefiniertes [Linker-Skript] (https://sourceware.org/binutils/docs/ld/Scripts.html#Scripts) zu schreiben –
Eine globale Zeigervariable, die wie folgt initialisiert wird, benötigt eine Verschiebung in PIC-Code. Ich denke nicht, dass es einen Weg gibt, um dies zu umgehen, also müssen Sie den PIC-Code deaktivieren oder einen winzigen dynamischen Linker schreiben, der die erforderlichen Relokationen durchführt. –