在 C 程序中,我需要重新初始化所有全局变量,因为它们在程序启动时用于测试目的。
我想重现由 GCC 库通过重新初始化功能完成的从加载内存地址、LMA 到 VMA(运行时地址)的数据副本。例如,如果 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),我应该怎么做才能实现这一目标?
编辑:这个页面似乎更精确:http: //sources.redhat.com/binutils/docs-2.12/ld.info/Output-Section-LMA.html#Output%20Section%20LMA