2 Stimmen

Experten - GCC und ld linker : Neuinitialisierung von Variablen in der .data Sektion?

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X