Dans un programme C, j'ai besoin de réinitialiser toutes les variables globales telles qu'elles étaient lorsque le programme démarre à des fins de test. Je souhaite reproduire la copie de données de Load Memory Address, LMA à VMA (adresse d'exécution) effectuée par les bibliothèques GCC avec une fonction de réinitialisation. Par exemple, si les variables foo sont déclarées comme globales et initialisées. Et si ma fonction de réinitialisation est re_init():Experts - GCC et ld linker: réinitialisation des variables contenues dans la section .data?
#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;
}
alors je veux avoir en sortie:
foo1:42 and foo2:777
Je crois que la bonne façon de le faire est le fichier de liaison par défaut et peut-être le code de démarrage qui copie les valeurs d'initiation à la RAM. Donc, avec GCC (cygwin), que dois-je faire pour y parvenir?
Edit: Cette page semble o avoir plus de précision sur elle: http://sources.redhat.com/binutils/docs-2.12/ld.info/Output-Section-LMA.html#Output%20Section%20LMA
Zack avait plus de voix: réponse acceptée. J'apprécierais une réponse aussi claire que Steven Schlansker cependant. – djondal