传入的是值,但是却要修改实参的办法

例如 void foo(int *t) {}; 要在foo中修改*t的值(不是t的值),办法如下:

&t为参数地址
(int*)&t - 1为返回的eip的地址
(int*)&t - 2为存储主调函数ebp的地址
(*((int*)&t - 2)为主调函数ebp的值
(*((int*)&t - 2) - 4)为主调函数中t的地址
*(int*)(*((int*)&t - 2) - 4) = 0;让主调函数中的t为0 

 

有可能实际行为与编辑器相关,仅作参考
 

你可能感兴趣的:(存储)