我试图在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)