相关疑难解决方法(0)

在用户空间中加载C中的ELF文件

我试图在64位x86环境中加载在Linux上使用"gcc -m32 test.c -o test.exe"编译的ELF文件.我试图在具有以下核心逻辑(32位ELF)的用户空间ELF加载器中加载该32位文件(test.exe).

问题是调用返回的起始地址会导致分段错误核心转储.这是代码:

void *image_load (char *elf_start, unsigned int size)
{
    Elf32_Ehdr      *hdr    = NULL;
    Elf32_Phdr      *phdr   = NULL;
    unsigned char   *start  = NULL;
    Elf32_Addr      taddr   = 0;
    Elf32_Addr      offset  = 0;
    int i = 0;
    unsigned char *exec = NULL;
    Elf32_Addr      estart = 0;

    hdr = (Elf32_Ehdr *) elf_start;

    if(!is_image_valid(hdr)) {
        printk("image_load:: invalid ELF image\n");
        return 0;
    }

    exec = (unsigned char *)mmap(NULL, size, PROT_READ | PROT_WRITE | PROT_EXEC,
                      MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);

    if(!exec) { …
Run Code Online (Sandbox Code Playgroud)

linux assembly elf loader

18
推荐指数
2
解决办法
1万
查看次数

标签 统计

assembly ×1

elf ×1

linux ×1

loader ×1