gcc有没有办法让未初始化的数据占用elf文件中的空间?

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

为了使加载 elf 文件更容易,我希望未初始化的数据占用 elf 文件中的空间。 gcc 有没有办法让未初始化的数据占用 elf 文件中的空间? 谢谢。

c elf
1个回答
0
投票

我有示例用户空间代码:

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;
}

这非常简单。

© www.soinside.com 2019 - 2024. All rights reserved.