例如 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
有可能实际行为与编辑器相关,仅作参考
例如 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
有可能实际行为与编辑器相关,仅作参考