有没有办法更改所有常量指针的目标部分?对我来说,选择' attibute '不行,因为我需要一些解决方案,如果没有源代码的更改,将无法正常工作。
这里的例子:
char * myString = "Some string to print";
正如我们所知,myString
存储在.data中并指向.rodata。系统将在应用程序启动期间通过从elf文件复制它来初始化它。但它只是原始数据,无法分析。问题是,当我们没有MMU,并且我们尝试使用-fPIC和.got时,指针不使用.got,所以它是正确的。
答案 0 :(得分:0)
详细描述情况,请看一下:
#include <oc_stdio.h>
#include <oc_stdtypes.h>
static char * SomeString = "Hue hue, it is my string!\n";
static uint32_t Variable = 0xDEADBEEF;
static uint32_t * Pointer = NULL;
static uint32_t Variable2 = 0xBEEFBABA;
//=========================================
/**
* The main entry of the application
*
* @param Argc Argument counter
* @param Argv Arguments array
*
* @return result
*/
//=========================================
int main( int Argc , char ** Argv )
{
printf("Hello ChocoOS - userspace World!\n");
printf("It is very nice to be here!\n");
printf("Here is string from data section: '%s'\n", SomeString);
printf("And here variable from data section: 0x%08X\n", Variable);
Pointer = &Variable2;
printf("Variable2 = 0x%08X\n", Variable2);
printf("Pointer to Variable2 = 0x%08X\n", Pointer);
printf("Value from pointer = 0x%08X\n", *Pointer);
printf("String pointer = 0x%08X\n", SomeString);
return 0;
}
实际结果是: Result of the program work
在二进制文件中你可以看到,字符串放在.rodata中: enter image description here
正如您在程序的输出中所看到的,指针存储.rodata的偏移量。
答案 1 :(得分:0)
以下是程序正确使用.got的证据: ASM .got