- 主题:内存覆盖问题都是咋定位的?
没什么不可能的。只等牛人出现
【 在 AGust2022 的大作中提到: 】
: 有没有可能搞个工具出来
:
--
FROM 125.33.34.*
watch?这个可以监控函数参数,一直运行到出问题暂停么?要跑一两天才能遇到。
【 在 woodxiang 的大作中提到: 】
: 都定位到哪儿被覆盖了,那就设置一个内存断点,看看是什么时候修改了
--
FROM 125.33.34.*
静态分析用啥工具比较好?
【 在 wjhtingerx 的大作中提到: 】
: 先用静态扫描工具扫描下代码,这个能发现绝大部分低级错误;
: 然后靠功能模块分析来处理,根据现象和规律,打开或关闭功能组合,一步步深入定位问题;
: 第三步才是靠各种动态分析工具,valgind之类的。
: ...................
--
FROM 117.133.52.*
被覆盖的就是一个函数的入参。进入函数后正常,执行几行之后应用这个入参的时候挂掉。
fun(arg)
arg->xx ok
... ok
arg->xx 挂掉
这种情况下watch这个arg能持续跑起来,等一两天,然后覆盖的时候中断么?
另外vaigrind 不管用。因为这个程序都是分配的大页内存。那个san也不行,因为san方式是截获的malloc。大页内存不用malloc分配。
【 在 woodxiang 的大作中提到: 】
: 这个不能监控函数参数,参数在栈上地址是会变来变去的,你不是说内存被覆写了吗你如果可以定位到被覆写的地址,那就watch这个地址,这个地址的内容变化的时候就会停在修改这个地址内容的指令上, 你再去检查堆栈,看看是什么问题。
--
FROM 117.133.52.*
c语言,指针
【 在 woodxiang 的大作中提到: 】
: arg->xx属性还是方法?
--
修改:chunhui FROM 117.133.52.*
FROM 117.133.52.*
是多次的。watch不行。参数每次都变,几百万个不同的地址会被当参数传入。不知道会覆盖哪一个。这个方式不行。
【 在 woodxiang 的大作中提到: 】
: 这个fun函数是被调用很多次吗?每次调用的参数一样吗,如果只调用一次,或者每次调用都用的同一个arg,那内存地址是固定的,就可以用watch,否则不行
--
FROM 117.133.52.*