gpt4 book ai didi

.net - 有人在 mscorwks.dll 中遇到过 INT 3 调试器中断吗?

转载 作者:行者123 更新时间:2023-12-03 15:34:33 26 4
gpt4 key购买 nike

我们将 .NET 运行时作为 Win32 程序的一部分进行托管,最近它开始在 mscorwks.dll 中的特定地址处持续中断。

在指定的地址处,有一个0xCC字节,这是一条INT 3指令,它会触发调试器。

还有人看过这个吗?

我在 dll 中看不到足够的信息来了解它的具体位置、函数或源代码,但它绝对不在我们的任何库中。

调用堆栈如下所示(来自 Delphi 2007):

:7a04f02a ; C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
:7a052fc6 ; C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
:7a053e72 ; C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
:7a03b970 ; C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
:7a00351e ; C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
:7a0255e0 ; C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
:79e71e6d ; C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
:7e42b372 USER32.MoveWindow + 0xd4
:7e4565b7 USER32.GetRawInputDeviceInfoW + 0x5f
:7e42ce7c USER32.SetLayeredWindowAttributes + 0x6a

失败的地址是0x7A04F029,内存中的反汇编如下:

7A04F020 call $7a14be35
7A04F025 cmp [esi],ebx
7A04F027 jz $7a04f02a
7A04F029 int 3 <-- here's the culprit
7A04F02A mov byte ptr [ebp-$04],$02
7A04F02E lea ecx,[ebp-$00000224]
7A04F034 call $79e82214

要摆脱它很容易,只需每次用 0x90 (NOP) 修补内存中的该字节即可,但下次我们启动调试器时,dll 当然会重新加载。

我有点想尝试修补文件本身,但我也不确定这是否是一个好主意。我已经验证 CC 字节是 dll 的一部分,并使用十六进制编辑器找到了周围的字节模式。

关于如何解决这个问题有什么建议吗?还有人看过这个吗?

已解决

正如答案中提到的,这是一个 LoaderLock 问题。在 Win32 中构建的 DLL 需要为我们的 .NET 系统公开一些函数,其方式与我们托管 .NET 运行时的方式无关。该项目包括几个单元,其中包含将要公开的函数,但不幸的是还添加了很多在应用程序中有用的代码,但不适用于此 DLL。

分离出我需要的函数将 DLL 的大小从 7MB 减少到大约 100KB,并且还摆脱了 LoaderLock。

最佳答案

有一个关于类似问题的讨论 here 。最有趣的部分是:

Mscorwks.dll is just the messenger. It is telling you that it detected a loaderlock. It is your code that caused it.

关于.net - 有人在 mscorwks.dll 中遇到过 INT 3 调试器中断吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/313802/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com