C 프로그램에서 테스트를 시작할 때 전역 변수를 다시 초기화해야합니다.전문가 - GCC 및 ld 링커 : .data 섹션에 포함 된 변수를 다시 초기화 하시겠습니까?
데이터 복사를로드 메모리 주소, LMA에서 VMA (런타임 주소)로 재생성하려면 재 초기화 기능이있는 GCC 라이브러리가 필요합니다. 예를 들어, foo 변수가 전역 변수로 선언되고 초기화되면. 그리고 내 재 초기화 기능) (re_init 경우 :
#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;
}
그때 내가 출력으로 갖고 싶어 :
foo1:42 and foo2:777
나는이 작업을 수행하는 올바른 방법은 기본 링커 파일이라고 생각 시작 값을 RAM에 복사하는 시작 코드 일 수 있습니다. 그래서 GCC (cygwin)에서이 작업을 수행하려면 어떻게해야합니까?
편집 :이 페이지는 O가 더 많은 정밀도가 보인다 http://sources.redhat.com/binutils/docs-2.12/ld.info/Output-Section-LMA.html#Output%20Section%20LMA
잭이 더 많은 투표를 가졌습니다. 대답을 수락했습니다. 나는 Steven Schlansker만큼 확실한 답을 고맙게 생각합니다. – djondal