推 wulouise: 你都有bt, 怎麼不先看看caller的植是不是對的? 07/23 15:02
上面所講的值 u4IfIndex=43 , u1AdminStatus=1 就是由 gdb print 印出來的
→ loadingN: 用 Valgrind 自己查啊 07/23 15:04
→ kokal: 試試"hardware" watchpoint? 07/23 15:32
→ xam: 比較簡單的就是你觀察一下這函式內有沒有呼叫完某個子程式回 07/23 16:00
→ xam: 來之後,值就跑掉,可能是裡頭有問題 07/23 16:01
基本上 pu1InOperStatus這是pointer
pu1InOperStatus=0x0(null)
API 用到它 整隻程式就 crash了
※ 編輯: tanted (106.1.107.225 臺灣), 07/23/2023 16:08:58
→ xam: 還是沒辦法的話,開發環境許可的話,把編譯器警告打開,修一修.. 07/23 16:04
※ 編輯: tanted (106.1.107.225 臺灣), 07/23/2023 16:09:33
→ xam: 我的意思是函式執行到一半,發現原本參數被改了,但如果你的意 07/23 16:13
→ xam: 思是一進入函式,參數就錯了.. 那我一時想不到其他簡單的建議 07/23 16:14
推 RafaelC: 可以用gdb裡 "watch"這個command可看是誰改了variable值 07/23 16:48
→ RafaelC: google一下gdb watch variable,就可以看到一些介紹了 07/23 16:50
難點 要監看是local variable 進入API後來才能監看
※ 編輯: tanted (106.1.107.225 臺灣), 07/23/2023 17:29:20
→ aa06697: 有碰哪些變數的地方都寫Log?總會找到哪裡改掉那些值 07/23 18:54
推 wulouise: 沒有signature, 你全部都pass by ref/ptr? 07/23 18:56
→ RafaelC: u4IfIndex不是是傳入的參數嗎?怎麼是local variaable? 07/23 18:59
其實上層有個變數 也叫u4IfIndex 和API 宣告的參數名字也叫u4IfIndex
上層 變數 u4IfIndex 的值是沒被改到 但API裡變數u4IfIndex的值被改到
目前 其實是這樣認為的
"原本thread 在進入 function,cpu 因context switch 換到其他的thread
而這個thread buff 沒有處理好 Overflow 蓋掉原本thread 的 stack buff"
※ 編輯: tanted (106.1.107.225 臺灣), 07/23/2023 19:27:24
推 jheli: 所以你傳入的前四個參數到底是global variables還是只是上 07/24 00:54
→ jheli: 層的local variables?上層的參數是static嗎? 07/24 00:54
→ jheli: 無法watch那就手動將每個會碰到這些參數的thread都埋log吧 07/24 01:01
推 wendly777: 懷疑被overflow攻擊,可以用ASan試試,另外,如果你是 07/24 19:35
→ wendly777: arm/x64,前幾個參數是放在register,就不可能被攻擊 07/24 19:35
→ wendly777: 到,就要往其他方向想,x86才會放stack 07/24 19:35
→ xam: 放register也是會炸啊,跳進子函式把stack搞爛,跳出來pop reg 07/24 21:18
→ xam: 就會得到非預期的東西... 07/24 21:18
推 Bencrie: 開 asan 下去跑吧,重 build 麻煩了一點 07/24 21:32
→ Bencrie: 不介意速度的話 valgrind 掛上去跑找看看存取越界 07/24 21:34
感謝C_C++版的 LPH66 給提示的
後來我開始推測可能是進入API後
前面4個變數給記憶體位置可能是不可寫入
也就說從頭到位 變數的值未被修改過
也沒有被其他thread 修改
從一開始進入這個API 就產生segment fault
https://upload.cc/i1/2023/07/24/oJ6wfn.jpg
u4IfIndex 的記憶體位置 是 0xaa303f9c
查看 thread map
https://upload.cc/i1/2023/07/24/2bNjEW.jpg
https://upload.cc/i1/2023/07/24/Bf2Mkn.jpg
右上圖圈選 得知 0xaa303f9 的確在不可存取記憶空間
目前推測會造成這樣原因
因為我們code 分成三個部分 在build
可能帶的最佳化選項 -O 後面數字都不一樣所造成
※ 編輯: tanted (106.1.107.225 臺灣), 07/24/2023 21:59:37
→ wendly777: 我是針對他說傳進去的參數被改掉 07/24 22:00