FW: [请益] 如何追查可能因MutilThtread下stackover

楼主: tanted (为何世界会那么不单纯)   2023-07-23 14:55:45
※ [本文转录自 C_and_CPP 看板 #1alCn-OQ ]
作者: tanted (为何世界会那么不单纯) 看板: C_and_CPP
标题: [问题] 如何追查可能因MutilThtread下stackover
时间: Sun Jul 23 14:45:15 2023
开发平台(Platform): (Ex: Win10, Linux, ...)
linux openwrt
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
gcc
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
问题(Question):
传入参数被莫名的修改
某个API 如下
CfaIfmNotifyInterfacStat (u4IfIndex, u1AdminStatus,
&u1OperStatus, u1IsFromMib,
u1IsRegToIp,
&IfInfo)) != CFA_SUCCESS)
传入时的值:
u4IfIndex=43 , u1AdminStatus=1, &u1OperStatus=(UINT1 *) 0xb1e0256f
进入API后值却变成
https://upload.cc/i1/2023/07/23/ZnvhDF.jpg
u4IfIndex=0, u1AdminStatus=0 , pu1InOperStatus=0x0,
前面4个参数都被变成0
请问各位网友其会被修改到的原因
是不是因为Mutil thread 所造成 其值被其他thread StackOverflow 修改
但由于thread 众多 各位网友是不是有什么的方式或tool
能介绍给我 去debug 找出是哪个thread 哪段code 所造成
谢谢
作者: wulouise (在线上!=在电脑前)   2023-07-23 15:02:00
你都有bt, 怎么不先看看caller的植是不是对的?
作者: loadingN (sarsaparilla)   2023-07-23 15:04:00
用 Valgrind 自己查啊
作者: kokal (细菌)   2023-07-23 15:32:00
试试"hardware" watchpoint?
作者: xam (听说)   2023-07-23 16:00:00
比较简单的就是你观察一下这函式内有没有呼叫完某个子程式回来之后,值就跑掉,可能是里头有问题还是没办法的话,开发环境许可的话,把编译器警告打开,修一修..
作者: RafaelC (爱看pili)   2023-07-23 16:48:00
可以用gdb里 "watch"这个command可看是谁改了variable值google一下gdb watch variable,就可以看到一些介绍了
作者: aa06697 (todo se andarà)   2023-07-23 18:54:00
有碰哪些变量的地方都写Log?总会找到哪里改掉那些值
作者: wulouise (在线上!=在电脑前)   2023-07-23 18:56:00
没有signature, 你全部都pass by ref/ptr?
作者: RafaelC (爱看pili)   2023-07-23 18:59:00
u4IfIndex不是是传入的参数吗?怎么是local variaable?
作者: jheli (我是企鹅)   2023-07-24 00:54:00
所以你传入的前四个参数到底是global variables还是只是上层的local variables?上层的参数是static吗?无法watch那就手动将每个会碰到这些参数的thread都埋log吧
作者: wendly777 (小水)   2023-07-24 19:35:00
怀疑被overflow攻击,可以用ASan试试,另外,如果你是arm/x64,前几个参数是放在register,就不可能被攻击到,就要往其他方向想,x86才会放stack
作者: xam (听说)   2023-07-24 21:18:00
放register也是会炸啊,跳进子函式把stack搞烂,跳出来pop reg就会得到非预期的东西...
作者: Bencrie   2023-07-24 21:32:00
开 asan 下去跑吧,重 build 麻烦了一点不介意速度的话 valgrind 挂上去跑找看看存取越界
作者: wendly777 (小水)   2023-07-24 22:00:00
我是针对他说传进去的参数被改掉

Links booklink

Contact Us: admin [ a t ] ucptt.com