Raz*_*Raz 5 c pointers function
我有以下代码:
void print(const char* str){
system_call(4,1,str,strlen(str)); }
void foo2(void){ print("goo \n");}
void buz(void){ ...}
int main(){
char buf[256];
void (*func_ptr)(void)=(void(*)(void))buf;
memcpy(buf,foo2, ((void*)buz)-((void*)foo2));
func_ptr();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
问题是,为什么这个代码会掉下来?
答案是,关于调用函数不是通过指针的东西是相对地址,但我还没有弄清楚这里有什么问题?哪条线是有问题的?
谢谢您的帮助
首先,没有任何内容表明 foo2() 和 buz() 在内存中必须彼此相邻。另一方面,正如您猜测的那样,代码必须是相对的,这样的特技才能发挥作用。但最重要的是,这是标准不允许的。
正如 Chris Luts 所提到的,堆栈(自动)变量在许多操作系统上无法执行,以防止受到攻击。