关于.gop和外部变量的二元问题

问题描述 投票:0回答:0

我正在尝试制作一个使用如下代码的裸机程序(它也可以称为玩具操作系统):

你好1.c

int a = 4;

hello2.c

void func(){
    extern int a;
    //Some operation using a...
}

我使用 gcc 进行编译,并使用“objcopy -O binary”将 elf 文件转换为二进制文件,使用我自己的链接器文件和 _start 函数。我发现 func() 中的 a 是 0.

我发现编译器在编译时没有更新外部变量的值。它在从 linux 的 _start 函数运行时更新变量,位于 dl_main。它用变量 a 的实际地址更新 .got 部分。我想改变这个,但不知道该怎么做。我尝试添加 -fno-pic 和 -fno-pie 但没有任何意义。

c gcc operating-system elf
© www.soinside.com 2019 - 2024. All rights reserved.