为了使加载 elf 文件更容易,我希望未初始化的数据占用 elf 文件中的空间。 gcc 有没有办法让未初始化的数据占用 elf 文件中的空间? 谢谢。
我有示例用户空间代码:
int main(int argc, char** argv);
/* Always first */
__attribute__((section(".text"))) long (*syscall)(unsigned short num, ...) = NULL;
int _start(int argc, char** argv)
{
return main(argc, argv);
}
/* */
int main(int argc, char** argv)
{
char buf[10];
syscall(SYS_DEBUG, (void*)buf);
return len;
}
并在没有 stdlib 的情况下编译它。 并且可以通过函数来执行它:
#define START 0x1008
#define SYSCALL 0x1000
int sys_exec(const char* file, int argc, char* const argv[])
{
struct stat st;
sys_stat(file, &st);
void* exec = exec_malloc(st.st_size);
memset(exec, 0x0, st.st_size);
if (exec == MAP_FAILED)
{
printf("Error allocate memory for %s\n", file);
return -1;
}
size_t size = sys_fread(file, exec, st.st_size, 0);
if (size <= 0)
{
printf("Error read %s\n", file);
return -1;
}
unsigned long* syscall = (unsigned long*)((char*)exec + SYSCALL);
*syscall = (unsigned long)&sys_syscall;
printf("exec=%p-%p syscall %p=%p\n", exec, (char*) exec + st.st_size, syscall, (void*)*syscall);
int (*start)(int argc, char* const argv[]) = (void*)((char*)exec + START);
int ret = start(argc, argv);
printf("return=%d\n", ret);
return ret;
}
这非常简单。