今天调试遇到了个很麻烦的事情,为了复现一个栈完全被踩成0x01010101010101010101的问题较劲了好几天
期间需要多次call 函数来模拟进程里的函数调用
但是坑爹的是,这个read_xxx(int, int, int*) 有个坑爹的指针
前2个入参好办,直接传个数进去就解决了,或者用set $i=0 来弄个临时变量也行
但是这个指针就麻烦了,没有上下调用栈,上哪弄个有效的指针给你啊
嗯, 全局变量,我也是这么干的
不过很不幸,全局变量通常都是蛮重要的,这么干的结果就是复现出来的问题是乱七八糟的,绝对的自己坑自己
尤其是这个指针还是个INOUT参数,指不定在哪步就被改了,坑的我一愣一愣的
后来终于找到了个比较好的解决办法
精华啊
这么牛逼的办法当然不是我想出来的,其实很简单,但当时就是没转过来,遗憾啊
read_xxx(0, 0,(int *)&g_err_str)
其实要的就是个有效的地址嘛,类型不对没关系啊,只要buffer够长什么都好说
找个全局的buffer,把地址强转下了传进去就好了,这种事情buffer来干是最好的了
本文分享了一种在调试过程中遇到的棘手问题——如何为一个需要指针参数的函数提供有效的指针。通过使用全局buffer并进行类型转换,作者成功地解决了这一难题。

1万+

被折叠的 条评论
为什么被折叠?



