delphi 7.0程序运行关闭最后弹出CPU窗口:ntdll.DbgBreakPoint的解决方法

问题出现现象:cpu窗口中出现如下内容:

7C92122E 90 nop

7C92122F 90 nop

ntdll.DbgBreakPoint://---------------------------

7C921230 CC int 3 //弹出时指定的行------------

7C921231 C3 ret

7C921232 8BFF mov edi,edi

7C921234 90 nop

7C921235 90 nop

7C921236 90 nop

7C921237 90 nop

7C921238 90 nop

7C921239 CC int 3

在主界面中的implementation {$R *.dfm} {$R *.RES} 下面增加如下代码:

procedure PatchInt3;

var

NOP: Byte;

NTDLL: THandle;

BytesWritten: DWORD;

Address: Pointer;

begin

 if Win32Platform <> VER_PLATFORM_WIN32_NT then

Exit;

 NTDLL := GetModuleHandle('NTDLL.DLL');

 if NTDLL = 0 then

Exit;

Address := GetProcAddress(NTDLL, 'DbgBreakPoint');

if Address = nil then

 Exit;

try

if Char(Address^) <> #$CC then

 Exit;

NOP := $90;

if WriteProcessMemory(GetCurrentProcess, Address, @NOP, 1, BytesWritten) and (BytesWritten = 1) then FlushInstructionCache(GetCurrentProcess, Address, 1);

except // Do not panic if you see an EAccessViolation here, it is perfectly harmless!

on EAccessViolation do ;

else

raise;

end;

end;

然后在窗体的Create中调用 PatchInt3 ;或者在窗体代码的最后一个end.前加入一下代码即可以解决

//-------------------------------------------------------------- i

nitialization

begin

PatchInt3; //防止关闭窗口时出现CPU: ntdll.DbgBreakPoint

end;

//-----------------------------------------------------------------------

end. 此代码从网上下载,遇到此问题,网上感觉说得不太清楚,所以写下来,以供后人参考。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值