linux GDB调试时的临时变量,临时指针
2016-03-02 18:30
295 查看
今天调试遇到了个很麻烦的事情,为了复现一个栈完全被踩成0x01010101010101010101的问题较劲了好几天
期间需要多次call 函数来模拟进程里的函数调用
但是坑爹的是,这个read_xxx(int, int, int*) 有个坑爹的指针
前2个入参好办,直接传个数进去就解决了,或者用set $i=0 来弄个临时变量也行
但是这个指针就麻烦了,没有上下调用栈,上哪弄个有效的指针给你啊
嗯, 全局变量,我也是这么干的
不过很不幸,全局变量通常都是蛮重要的,这么干的结果就是复现出来的问题是乱七八糟的,绝对的自己坑自己
尤其是这个指针还是个INOUT参数,指不定在哪步就被改了,坑的我一愣一愣的
后来终于找到了个比较好的解决办法
精华啊
这么牛逼的办法当然不是我想出来的,其实很简单,但当时就是没转过来,遗憾啊
read_xxx(0, 0,(int *)&g_err_str)
其实要的就是个有效的地址嘛,类型不对没关系啊,只要buffer够长什么都好说
找个全局的buffer,把地址强转下了传进去就好了,这种事情buffer来干是最好的了
期间需要多次call 函数来模拟进程里的函数调用
但是坑爹的是,这个read_xxx(int, int, int*) 有个坑爹的指针
前2个入参好办,直接传个数进去就解决了,或者用set $i=0 来弄个临时变量也行
但是这个指针就麻烦了,没有上下调用栈,上哪弄个有效的指针给你啊
嗯, 全局变量,我也是这么干的
不过很不幸,全局变量通常都是蛮重要的,这么干的结果就是复现出来的问题是乱七八糟的,绝对的自己坑自己
尤其是这个指针还是个INOUT参数,指不定在哪步就被改了,坑的我一愣一愣的
后来终于找到了个比较好的解决办法
精华啊
这么牛逼的办法当然不是我想出来的,其实很简单,但当时就是没转过来,遗憾啊
read_xxx(0, 0,(int *)&g_err_str)
其实要的就是个有效的地址嘛,类型不对没关系啊,只要buffer够长什么都好说
找个全局的buffer,把地址强转下了传进去就好了,这种事情buffer来干是最好的了
相关文章推荐
- centos编译hadoop2.7.2 本地库
- 使用ssh连接centos出现密钥错误的解决方法
- 常用Linux命令
- linux下svn命令大全
- Linux中find常见用法示例
- Linux命令--文件权限和磁盘管理
- linux学习(第一天)
- Linux命令--文件管理
- Linux多线程编程API基础---1
- Linux 用户管理
- How To Install Speedtest-cli On a CentOS / RHEL / Scientific / Fedora Linux To Check Internet Speed
- Linux Fedora安装交叉编译工具链
- centos克隆,网卡启动失败
- linux路由
- linux下后台执行程序命令nohub
- Linux程序设计--套接字学习笔记
- 《Linux内核分析》第二周 操作系统是如何工作的?
- Linux信号(signal)
- linux存储技术与应用:Multipath多路径
- linux下删除-号开头的文件