linux GDB调试时的临时变量,临时指针

本文分享了一种在调试过程中遇到的棘手问题——如何为一个需要指针参数的函数提供有效的指针。通过使用全局buffer并进行类型转换,作者成功地解决了这一难题。

今天调试遇到了个很麻烦的事情,为了复现一个栈完全被踩成0x01010101010101010101的问题较劲了好几天

期间需要多次call 函数来模拟进程里的函数调用

但是坑爹的是,这个read_xxx(int, int, int*) 有个坑爹的指针

前2个入参好办,直接传个数进去就解决了,或者用set $i=0 来弄个临时变量也行

但是这个指针就麻烦了,没有上下调用栈,上哪弄个有效的指针给你啊

嗯, 全局变量,我也是这么干的

不过很不幸,全局变量通常都是蛮重要的,这么干的结果就是复现出来的问题是乱七八糟的,绝对的自己坑自己

尤其是这个指针还是个INOUT参数,指不定在哪步就被改了,坑的我一愣一愣的

后来终于找到了个比较好的解决办法

精华啊

这么牛逼的办法当然不是我想出来的,其实很简单,但当时就是没转过来,遗憾啊

read_xxx(0, 0,(int *)&g_err_str)

其实要的就是个有效的地址嘛,类型不对没关系啊,只要buffer够长什么都好说

找个全局的buffer,把地址强转下了传进去就好了,这种事情buffer来干是最好的了


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值