工作學習筆記——.Net 4.0安裝失敗、RealView編譯器生成的程序小的不正常

今天碰到兩個比較奇怪的問題,尋找答案的過程比較有意思。

1. .Net 4.0安裝失敗

 

Installation Log報告的消息是,“Final Result: Installation failed with error code: (0x80070643), "安裝時發生嚴重錯誤 "”

其中錯誤代碼0x80070643網上說表示安裝過程中遇到一般性錯誤。信息不夠,繼續看Installation failed. Msi Log,這個Log文件很大,有幾M,不好直接看。在Log中搜索error,除了"SchedSecureObjectsRollback: Failed to store ACL rollback information with error 0x80070424"之外也沒有找到什麼有用信息。正一籌莫展之際,搜到了這篇文章

 

How to locate the cause of error code 1603 in a verbose MSI log file

其中提到在Msi.Log中搜索錯誤的常用方法是搜"return value 3",還提到如果是在非英文windows系統上,這個搜索並不起作用。順着這個提示,我在Log文件中搜索"返回值 3"(搜中文"錯誤"也是可以的),果然找到了有用的信息:

 

“錯誤 1406。
無法將數值 PresentationHost.exe 寫入鍵 
/SOFTWARE/Microsoft/Internet Explorer/Main/FeatureControl/FEATURE_ZONE_ELEVATION。 
系統錯誤 。 請驗證您對該鍵擁有足夠的訪問權限,或者與您的技術支持人員聯繫。”
用regedit給/SOFTWARE/Microsoft/Internet Explorer/Main/FeatureControl加上權限再安裝就好了。
加權限第一次沒有成功。後來參考了一篇文章
解決“請驗證您對該鍵擁有足夠的訪問權限,或者與您的技術支持人員聯繫
指出的給Users用戶加權限的方式就ok了。

至於爲何只有個別機器在安裝.Net 4.0過程中出現這種問題,就不得而知了(可能是這些機器安裝了某些安全軟件,提高了系統的安全級別)。

2.RealView編譯器生成了只有8個字節大小的mod

一個程序,用GCC編譯一百多K,用RealView編譯鏈接後生成mod只有8個字節。看編譯過程,沒有明顯的警告和錯誤提示。

一步一步往前推,使用objdump命令查看鏈接生成的elf文件,發現ER_RO段(只讀代碼段)的數據就非常少。聯想到RealView編譯器有自動去掉未使用函數的功能,查看了程序的入口函數所在的目標文件。果然入口函數的目標代碼也少的出奇。這時再仔細檢查編譯過程,發現編譯入口函數所在的文件時,並不是編譯的期望的文件,而是另外一個同名文件。而這個同名文件的入口函數直接就用return返回了。RealView發現不會用到工程中的其它函數,生成的elf文件裏就只有這條返回指令了。GCC沒有這個功能,仍然把工程中的所有函數都編譯到目標文件中了。當然因爲這時入口函數是錯誤的,這個GCC生成的mod應該是無法運行的。只不過mod要上手機才能運行,搜尋問題的過程沒有從這條路上走。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章