In einem C-Programm muss ich alle globalen Variablen so neu initialisieren, wie sie beim Start des Programms zu Testzwecken waren.
Ich möchte die Datenkopie von Load Memory Address, LMA nach VMA (Laufzeitadresse) reproduzieren, die von GCC-Bibliotheken mit einer Reinitialisierungsfunktion durchgeführt wird. Zum Beispiel, wenn foo-Variablen als global deklariert und initialisiert werden. Und wenn meine Neuinitialisierungsfunktion re_init() ist:
#include <stdio.h>
int foo1 = 42;
int foo2 = 777;
int main(){
foo1 = 0;
foo2 = 0;
re_init();
printf("foo1:%d and foo2:%d",foo1,foo2);
return 0;
}
dann möchte ich als Ausgabe haben :
foo1:42 and foo2:777
Ich glaube, dass der richtige Weg, dies zu tun ist, um die Standard-Linker-Datei und vielleicht die Startup-Code, der Initiation Werte in RAM kopieren. Also, mit GCC (cygwin), was sollte ich tun, um dies zu erreichen?
Edit: Diese Seite scheint präziser zu sein: http://sources.redhat.com/binutils/docs-2.12/ld.info/Output-Section-LMA.html#Output%20Section%20LMA