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

本文介绍了一种在C语言中通过特定调用约定修改传入指针所指向变量值的方法。通过调整堆栈布局,可以间接改变主调函数中变量的值,这种方法对于理解函数调用过程和内存布局有一定帮助。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

例如 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 

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值