C函数如何不通过传参修改外部变量 财富值44

2016-10-21 16:24发布

void fun_a(void) {   .... }      int main() {     int x = 5, y = 6;     fun_a();      printf("%d, %d", x, y);         return 0; }

请问 fun_a 函数内部如何实现能够改变程序输入不为5,6?[一道笔试题,考虑了很久,感觉可以通过指针hack外部变量,但是没有进一步思路]

4条回答

这里要在func_a里面修改x/y,就需要得到它们的地址,可以使用以下方式来达到目的。


看上图,这是linux下的进程内存空间布局图,是32位的,64位也差不多,地址不一样而已。
首先要明确一点,就是函数的调用是栈式的,而栈空间的地址是向下的,也就是后入栈的内存地址反而小。并且入栈的地址是对齐的。(这不是绝对的。不同的体系结构下可能是完全不同的)

main函数里面先入栈了y,然后入栈了x,再入栈函数func_a

如果算偏移影响因素太多(机器字长、编译器优化),只是希望修改程序输出,那直接输出并退出就好了:

一周热门 更多>