Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试调用PROT#U EXEC'上的代码时出现SEGFULT;d堆_C_Segmentation Fault_Loader - Fatal编程技术网

尝试调用PROT#U EXEC'上的代码时出现SEGFULT;d堆

尝试调用PROT#U EXEC'上的代码时出现SEGFULT;d堆,c,segmentation-fault,loader,C,Segmentation Fault,Loader,我正在mmap(PROT_READ | PROT_WRITE | PROT_EXEC)ed内存区域中加载一个ELF可执行文件(一个用clang编译的barebones C hello world),从ELF头读取其条目地址,然后在该地址调用代码,如下所示: void* bin = ...; //address of the executable in memory: bin[0:1] = 0x7f45 void* entry = bin + read_elf(bin)->entry; //

我正在mmap(PROT_READ | PROT_WRITE | PROT_EXEC)ed内存区域中加载一个ELF可执行文件(一个用clang编译的barebones C hello world),从ELF头读取其条目地址,然后在该地址调用代码,如下所示:

void* bin = ...; //address of the executable in memory: bin[0:1] = 0x7f45
void* entry = bin + read_elf(bin)->entry; //casts/junk omitted, I get the correct sum of address and offset
((void (*)(void))entry)();
但是,它会出现错误14(GNU/Linux x86_64 3.13)


内存页应已标记为可执行。出了什么问题?

在调用
main
函数之前运行的初始化代码在某些地方会出现问题,例如在哪里可以找到命令行参数等。如果不提供这些内容,则会出现未定义的行为和崩溃。我知道,但是在解决这个问题之前,我更愿意让代码首先运行。如果代码期望一个有效的环境能够首先运行,而您没有提供该环境,那么您就不能运行代码。它期望在ebp中有一个分配的堆栈吗?是的,这是它可能期望的事情之一,要获得有效的堆栈。此外,例如,Linux加载程序提供了一个指向命令行参数的指针(始终至少有一个,
argv[0]
),如果该指针不正确,您将有未定义的行为。