[英]What are these little functions in FFFF**** addres space seen by C# code x86 disassembly?
在調試一些用C#編寫的代碼時,我不得不遍歷反匯編才能更清楚地了解微級上正在發生的事情。 大多數代碼相當透明,但是CLR或C#顯然提供了一些功能,因為我沒有實現它們,它們位於0xffff ****地址空間中,而我卻不知道。 例如在Bitmap.Width
有一個FFFF0630的調用:
00000000 push ebp
00000001 mov ebp,esp
00000003 push eax
00000004 xor eax,eax
00000006 mov dword ptr [ebp-4],eax
00000009 mov eax,dword ptr [ecx+10h]
0000000c mov edx,ecx
0000000e push eax
0000000f push edx
00000010 lea ecx,[ebp-4]
00000013 call FFFF0630
我無法使用調試器進入它,所以我只能從上下文中推測,它應該用於某種內存驗證。 但我不知道,因為即使該功能二層Bitmap.Height
有在同一地點另一個地址FFFF060C。 對兩個幾乎等效的屬性進行不同的驗證沒有多大意義。
那么,這些功能的確是什么? 他們在做什么?
我無法使用調試器進入
您是否啟用了本地調試? .NET將底層Win32函數用於OS服務。 它可能是對本機DLL的調用。
有另一個地址FFFF060C
找出地址加載哪些庫的兩種方法:
Visual Studio中的“模塊”視圖(菜單:“調試” |“ Windows” |“模塊”)。
流程瀏覽器的視圖| 下部窗格視圖 Dlls(您可能需要添加基地址列)。
DLL加載的地址取決於OS,32/64位,ASLR和DLL中的首選基址。
通常,系統DLL在進程的地址空間中加載得很高。
您可以在此處找到System.Drawing, Bitmap
所在的位置。 它從Image
繼承, Image
同時包含Height
和Width
。 他們看起來像這樣:
public int Height {
get {
uint height;
Status status = GDIPlus.GdipGetImageHeight (nativeObject, out height);
GDIPlus.CheckStatus (status);
return (int)height;
}
}
public int Width {
get {
uint width;
Status status = GDIPlus.GdipGetImageWidth (nativeObject, out width);
GDIPlus.CheckStatus (status);
return (int)width;
}
}
它們都稱為GDIPlus.CheckStatus
所以它們是共同的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.