- 主题:内存覆盖问题都是咋定位的?
有没有可能搞个工具出来
【 在 chunhui 的大作中提到: 】
: 标 题: Re: 内存覆盖问题都是咋定位的?
: 发信站: 水木社区 (Sat Jul 22 10:50:41 2023), 站内
:
: Linux
: 【 在 AGust2022 的大作中提到: 】
: : 在什么环境下覆盖的?
: :
:
: --
:
: 寂寞随着胡子疯长
: 我剃掉胡子
: 心却更加荒凉
:
: 3
:
:
: ※ 来源:·水木社区
http://www.mysmth.net·[FROM: 125.33.34.*]
--
FROM 122.194.9.*
没什么不可能的。只等牛人出现
【 在 AGust2022 的大作中提到: 】
: 有没有可能搞个工具出来
:
--
FROM 125.33.34.*
都定位到哪儿被覆盖了,那就设置一个内存断点,看看是什么时候修改了
【 在 chunhui 的大作中提到: 】
: 昨天简单试了一下 valgrind,程序不能正常启动。初始化有一行失败,不加valgrind正常。
: 这个程序是个稍微大型的长时间后台服务。总有个函数入参被覆盖,而且需要跑很久才能碰上。用watch貌似也不太行,我要试试再说
--
FROM 123.113.10.*
watch?这个可以监控函数参数,一直运行到出问题暂停么?要跑一两天才能遇到。
【 在 woodxiang 的大作中提到: 】
: 都定位到哪儿被覆盖了,那就设置一个内存断点,看看是什么时候修改了
--
FROM 125.33.34.*
不管啥问题,先想办法缩小问题的范围,硬看代码也好,加点调试打印也好,live debugging或者core debugging也好。
--
FROM 123.118.191.*
先用静态扫描工具扫描下代码,这个能发现绝大部分低级错误;
然后靠功能模块分析来处理,根据现象和规律,打开或关闭功能组合,一步步深入定位问题;
第三步才是靠各种动态分析工具,valgind之类的。
以上主要靠第二步解决问题。
【 在 chunhui 的大作中提到: 】
: 有啥好工具办法么。我这只能瞎猜。
--
FROM 65.49.223.*
静态分析用啥工具比较好?
【 在 wjhtingerx 的大作中提到: 】
: 先用静态扫描工具扫描下代码,这个能发现绝大部分低级错误;
: 然后靠功能模块分析来处理,根据现象和规律,打开或关闭功能组合,一步步深入定位问题;
: 第三步才是靠各种动态分析工具,valgind之类的。
: ...................
--
FROM 117.133.52.*
这个不能监控函数参数,参数在栈上地址是会变来变去的,你不是说内存被覆写了吗你如果可以定位到被覆写的地址,那就watch这个地址,这个地址的内容变化的时候就会停在修改这个地址内容的指令上, 你再去检查堆栈,看看是什么问题。
【 在 chunhui 的大作中提到: 】
: watch?这个可以监控函数参数,一直运行到出问题暂停么?要跑一两天才能遇到。
--
FROM 182.48.105.*
被覆盖的就是一个函数的入参。进入函数后正常,执行几行之后应用这个入参的时候挂掉。
fun(arg)
arg->xx ok
... ok
arg->xx 挂掉
这种情况下watch这个arg能持续跑起来,等一两天,然后覆盖的时候中断么?
另外vaigrind 不管用。因为这个程序都是分配的大页内存。那个san也不行,因为san方式是截获的malloc。大页内存不用malloc分配。
【 在 woodxiang 的大作中提到: 】
: 这个不能监控函数参数,参数在栈上地址是会变来变去的,你不是说内存被覆写了吗你如果可以定位到被覆写的地址,那就watch这个地址,这个地址的内容变化的时候就会停在修改这个地址内容的指令上, 你再去检查堆栈,看看是什么问题。
--
FROM 117.133.52.*
arg->xx属性还是方法?
【 在 chunhui 的大作中提到: 】
: 被覆盖的就是一个函数的入参。进入函数后正常,执行几行之后应用这个入参的时候挂掉。
: fun(arg)
: arg->xx ok
: ...................
--
FROM 182.48.105.*