-
-
lpk 在win7下编写需要注意什么?
-
发表于: 2010-10-28 16:34 4778
-
我写了个lpk,在xp下可以执行正常,在win7下提示错误。
win7下:
用od跟踪发现,发现是执行LpkEditControl错误,地址为全0,应该是没有得到系统目录下lpk.dll函数的正确地址。
再次跟踪发现,lpk中所有输出表的地址都没有从系统lpk中得到,即用户程序下的lpk.dll没有执行初始化,但从od看到这个用户程序下lpk已经加载了。
如果od直接加载lpk.dll,可以执行dll的初始化DLL_PROCESS_ATTACH部分。
Executable modules
Base Size Entry Name File version Path
00400000 000F0000 004B4C74 Project1 D:\delphi\lpk_dll\winmpeg\win7\Project1.exe
60000000 00011000 600070CC LPK D:\delphi\lpk_dll\winmpeg\win7\LPK.dll //这已经加载了,
library lpk;
{$IMAGEBASE $20000000}
uses
windows,
hook in 'hook.pas',
oriLPK in 'oriLPK.pas',
lpkutils in 'lpkutils.pas',
apiHook in 'apiHook.pas';
{$R *.res}
procedure MyDLLHandler(Reason: Integer);
begin
case Reason of
DLL_PROCESS_ATTACH:
begin
//vmprotectbegin('StartHook');
loadoriLpk;
StartHook;
//vmprotectend;
end;
DLL_PROCESS_DETACH:
;
DLL_THREAD_ATTACH:
;
DLL_THREAD_DETACH:
;
end;
end;
begin
asm
int 3; //调试时,od在这里不中断,也就是说明dll没有执行初始化。
end;
DLLProc := @MyDLLHandler;
DLLProc(DLL_PROCESS_ATTACH); //这个地方在win7下不执行,导致 loadoriLpk无法执行,dll没有初始化,为什么呢?
end.
错误信息:
问题签名:
问题事件名称: APPCRASH
应用程序名: Project1.exe
应用程序版本: 0.0.0.0
应用程序时间戳: 4cb91770
故障模块名称: StackHash_4c0d
故障模块版本: 0.0.0.0
故障模块时间戳: 00000000
异常代码: c0000005
在win7下写lpk还需要注意什么呢?
以下这个已经修改和win7也重启了。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager]
"ExcludeFromKnownDlls"=hex(7):6c,00,70,00,6b,00,2e,00,64,00,6c,00,6c,00,00,00,00,00
win7下:
用od跟踪发现,发现是执行LpkEditControl错误,地址为全0,应该是没有得到系统目录下lpk.dll函数的正确地址。
再次跟踪发现,lpk中所有输出表的地址都没有从系统lpk中得到,即用户程序下的lpk.dll没有执行初始化,但从od看到这个用户程序下lpk已经加载了。
如果od直接加载lpk.dll,可以执行dll的初始化DLL_PROCESS_ATTACH部分。
Executable modules
Base Size Entry Name File version Path
00400000 000F0000 004B4C74 Project1 D:\delphi\lpk_dll\winmpeg\win7\Project1.exe
60000000 00011000 600070CC LPK D:\delphi\lpk_dll\winmpeg\win7\LPK.dll //这已经加载了,
library lpk;
{$IMAGEBASE $20000000}
uses
windows,
hook in 'hook.pas',
oriLPK in 'oriLPK.pas',
lpkutils in 'lpkutils.pas',
apiHook in 'apiHook.pas';
{$R *.res}
procedure MyDLLHandler(Reason: Integer);
begin
case Reason of
DLL_PROCESS_ATTACH:
begin
//vmprotectbegin('StartHook');
loadoriLpk;
StartHook;
//vmprotectend;
end;
DLL_PROCESS_DETACH:
;
DLL_THREAD_ATTACH:
;
DLL_THREAD_DETACH:
;
end;
end;
begin
asm
int 3; //调试时,od在这里不中断,也就是说明dll没有执行初始化。
end;
DLLProc := @MyDLLHandler;
DLLProc(DLL_PROCESS_ATTACH); //这个地方在win7下不执行,导致 loadoriLpk无法执行,dll没有初始化,为什么呢?
end.
错误信息:
问题签名:
问题事件名称: APPCRASH
应用程序名: Project1.exe
应用程序版本: 0.0.0.0
应用程序时间戳: 4cb91770
故障模块名称: StackHash_4c0d
故障模块版本: 0.0.0.0
故障模块时间戳: 00000000
异常代码: c0000005
在win7下写lpk还需要注意什么呢?
以下这个已经修改和win7也重启了。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager]
"ExcludeFromKnownDlls"=hex(7):6c,00,70,00,6b,00,2e,00,64,00,6c,00,6c,00,00,00,00,00
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
他的文章
- [分享][下载]bindiff/binexport for ida9 rc1 mac intel 4255
- [分享]patching在ida9的可用版本 5280
- [原创]注册码证书验证过程 45829
- [原创]用peach又发现一个飞秋bug,不知道对不 9477
- [求助][原创]建议 4993
看原图
赞赏
雪币:
留言: