→ Lordaeron:咦, 不是很鐵? 怎麼跟spec 寫的不一樣了, 太神奇了. 03/16 23:06
→ mapleone:這個結果是否證明pre-fetch防debug的技術在目前主流硬 03/17 10:38
→ mapleone:體環境已經失效呢? 03/17 10:38
8086 pfiq 的副作用應該是設計時的一種失誤. self modifying code 一直都是
精簡程式與迷惑追蹤者的手段, 只是她更利用了 PFIQ 這個設計失誤的副作用.
會使得追蹤者掉入陷井增加難度. prefetch 是用來加快執行的, 利用 pipleline
的構思使 fetch cycle 與 execution cycle 可以併時平行加快速度. 原設計不
是用來防 debug 的.
推 SlimeEditor:原設計的目的是一回事 可以這樣做是另一回事... 03/17 14:20
沒有這個副作用, 也是可照用這種 self-modifying code 來迷惑追蹤者, 但
對有經驗的, 不論那一種招, 很快就看穿過關了.
keypro 靠的是要認證這個 "keypro信物" 的存在, 只是不讓人知道檢驗的程
式在何處, 何時會被執行, 因此會防追蹤. 理論上, 虛擬機更容易偵測到這
種 i/o 動作的發生. 若是永遠不變的信物更容易被模擬出來.
→ Lordaeron:哪證明你不鐵就好了. 03/18 11:50
如果透過 debug 讀出來的結果跟其他程式讀出來的結果會不同, 那也不必用 debug
來驗證 prefetch instruction queue 的副作用了.
某些程式會干擾 debug 的執行, 但也未必就能全干擾得到, 那是看怎麼用.
用software做debug single step trace 的, 都知道 self-modifying code 會干
擾 next single step. 這現象不應說成 debug 可能會讀出不同的結果. 若是被監
測的與監測的產生相互干擾, 監測的儀器根本就不可能監測出被監測對象的正確效
應.
實況是選擇不相互干擾且正確必經的斷點觀測, 就能觀察出被監測程式的執行效應.
A 程式使用 PFIQ 產生的效果, 跟用 B程式 也是同樣使用 PFIQ 的效果如果會不
同, 那這個執行程式的硬體不可能會被認定是穩定可靠. 若(A+B)程式交互或同時
執行, A與B若沒有相互干擾, 結果應該跟各別執行是相同的效果.
debug 依舊是能判讀出某型 CPU 的 PFIQ 是否有副作用的問題. 檢驗法依舊是靠
極端特例的 self-modifying code. 此法本就會使下一步的執行受影響, 而難如正
常下, 不做特別干擾, 因此可於未執行前就事先觀察做預測. SMC是引入干擾使之
無法事先有可預測性, 必須待執行後才知曉, 但不影響執行後的可觀測性.
→ Lordaeron:不用再講了, 反正你鐵不了, 就這樣. 要賣老賣不成了.... 03/18 14:35
一直還沒看你舉出一個 debug 跟 keypro 相關程式會讀出來不一樣的例子! 這疑問
跟誰老毫不相干. 這是個儀測的 load effect 基本問題.
→ Lordaeron:哦, 我沒例子呢, 你去買個keypro來玩吧, 加油。 03/18 18:00
→ Lordaeron:記得要小心prefech 哦。 03/18 18:00
→ Lordaeron:你既然知道debug step trace 會錯, 哪麼我之前講的 03/18 18:02
→ Lordaeron:方式就可以讓你step trace 走錯, 走錯讀出來的code 就 03/18 18:03
→ Lordaeron:可以錯了. 03/18 18:03
step trace 靠預測下一步先堵斷, 先預測錯誤可不是讀錯喔!
self-modifying code 做那一步時覆蓋了debug先堵斷的位置, 使真正的下一步
指令變了. 這是執行那步後更改覆蓋. debug 讀的並沒錯, debug 先設的斷點被
覆蓋失效, 無法使斷點發生 int3 進入不了 debug , 可不是 debug 程式去讀讀
錯.
debug step trace 是使每個單步執行前都事先預測可能的下一步,使之執行一步
前就覆蓋下一步的 op-code 為 int-3 , 靠 int 3 接回去 debug 顯示. 這動作
會改變實際執行次序, 使得逐步做跟快速放開隔距截斷的執行次序有所不同. 用
self-modifying code 更改 prefetch instruction queue 對應的記憶體位置,
將隨逐步接回 debug 的次序與放開快步做緊跟的指令次序有所不同, 有副作用
的 PFIQ 就因指令次序位置而產生不同結果. 這跟 debug 是否讀錯一點關係都
沒有.
沒有副作用的 P4 cpu PFIQ 就會照 self modifying code 的修改立即生效, 使
得逐步做跟放開快速做的結果都相同. 這是 CPU 硬體的特性問題, 不論是否有無
副作用, 都不會隨那種片段程式的執行而有差別性地因不同程式帶來差異.
Debug 程式讀的跟 keypro 程式讀的, 都作用在同一個 cpu, 不會結果有所不同.
這些 cpu 硬體也沒有做成會認得某個程式就讀出給x, 認得另個程式就讀出給y.
→ Lordaeron:你回去好好看我之前講的吧, 別在扯了. 你加油吧. 03/18 20:16
→ Lordaeron:市面上的keypro 還很多, 花點錢去玩吧. 03/18 20:17
我在等你的程式例子. 別再拿self-modifying code 蒙混.
※ 編輯: ggg12345 來自: 140.115.4.90 (03/18 20:33)