反編譯記事本(4) 未經(jīng)處理的異常 : 0xC0000005
????接下來(lái)開(kāi)始解決運(yùn)行時(shí)錯(cuò)誤.

????點(diǎn)擊"中斷"按鈕, 鼠標(biāo)停在觸發(fā)異常的代碼處.

????根據(jù) API 函數(shù) LoadString 的參數(shù)說(shuō)明, 并觀察各個(gè)參數(shù)的定義, 可以猜測(cè)最可能出問(wèn)題的是第2個(gè)參數(shù). 查看第2個(gè)參數(shù)的聲明:

????????查看第2個(gè)參數(shù)的引用 :

????顯然是數(shù)組越界的問(wèn)題, 而 v3 是數(shù)組索引, 根據(jù)循環(huán)條件 v3 < 45 , 可以猜測(cè)數(shù)組大小是45.
根據(jù) LoadString 的聲明, 第 2 個(gè)參數(shù)的類型是 UINT, 則數(shù)組 off_10090E8 的類型是 UINT**.
????在IDA Pro中將該數(shù)組聲明為UINT*[45], 然后導(dǎo)出, 有些數(shù)組元素也要修改類型, 然后替換掉原來(lái)的數(shù)組聲明, 即可解決這個(gè)函數(shù)中的問(wèn)題.
????

????對(duì)于這個(gè)函數(shù)中的問(wèn)題, 我還發(fā)現(xiàn)資源似乎沒(méi)有正確包含, 那么只能去掉notepad.rc中復(fù)制過(guò)來(lái)的代碼了. 然后再資源視圖中右鍵 -> 添加資源, 手動(dòng)創(chuàng)建每個(gè)類型的資源, 然后再把具體類型的資源代碼復(fù)制到具體類型的資源聲明中去.

????比如添加字符串資源后, rc代碼中就有了STRINGTABLE BEGIN END 這個(gè)代碼, 把原來(lái)的字符串資源代碼復(fù)制到 BEGIN 和 END 之間就能在資源視圖中看到下面這樣的字符串資源了.
