[英]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.