2011-12-09 31 views
1

在wince 5.0 arm設備仿真器上運行程序時,它始終報告數據未對齊。例外是wince數據未對齊

Data Abort: Thread=8db5e6f4 Proc=8c24cb60 'test.exe' 
AKY=00001001 
PC=03f91cfc(coredll.dll+0x00021cfc) 
RA=1a12a988(test.exe+0x0011a988) 
BVA=0000001e 
FSR=00000001 

根據地圖文件,PC在功能CeHeapCreate()。返回地址不在代碼部分,可能在堆中。 運行應用程序驗證程序檢測內存問題時,數據中止消失,程序正常運行。 是什麼導致它以及如何調試這種情況?

回答

1

我們需要看到test.exe正在調用coredll。返回地址(RA)告訴你你的應用程序中的通話來自哪裏,你只需要decode it back to a line of code。 WAG是您將結構體或字節數組傳遞給未對齊的API調用。再次,沒有代碼,我們只能猜測。

+0

代碼和數據部分的總長度大約爲0xB0000。所以RA 0x11a988超出了該地址空間。當我進行一些代碼更改時,數據中止可能會消失一段時間,但會再次出現在另一個地方。 – Bergenst

+0

靜態如何?他們分配在一個單獨的位置。 – ctacke