我在下面有这段C代码以及我给code[]
的任何价值,我得到Segmentation fault (core dump)
。你知道为什么会这样吗?
char code[] = "";
int main(int argc, char **argv)
{
int (*func)();
func = (int (*)()) code; //typecast the array code to be a function pointer
(int)(*func)();
}
答案 0 :(得分:1)
将object指针转换为函数指针为undefined behaviour。简单地说,函数指针只能转换为另一个函数指针,而不能转换为对象指针,反之亦然。
请注意,现代操作系统默认保护数据内存段不被执行代码("没有执行",NX
),因此您很乐意遇到访问冲突异常。
最后并非最不重要:您很可能必须链接/绑定/重新定位您的代码才能执行有用的操作。
答案 1 :(得分:-1)
您的shellcode可能是只读的,以使其可执行,您需要:
mprotect((void *)((uint64_t)code & ~4095), 4096, PROT_READ|PROT_EXEC);