首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

dll注入例子的疑问?解决方案

2012-02-20 
dll注入例子的疑问?请看下面这段函数怎么有2个Var和2个处理过程?function AnsiEndsText(const ASubText, A

dll注入例子的疑问?
请看下面这段函数怎么有2个Var和2个处理过程?
  function AnsiEndsText(const ASubText, AText: string): Boolean;
  var
  P: PChar;
  L, L2: Integer;
  begin
  P := PChar(AText);
  L := Length(ASubText);
  L2 := Length(AText);
  Inc(P, L2 - L);
  if L > L2 then
  Result := False
  else
  Result := CompareString(LOCALE_USER_DEFAULT, NORM_IGNORECASE,P, L, PChar(ASubText), L) = 2;
  end;
var
  sphandle: DWORD; Found: Bool;
  PStruct: TProcessEntry32;  
begin
  Result := 0;
  sphandle := CreateToolhelp32Snapshot($00000002, 0);
  PStruct.dwSize := Sizeof(PStruct);
  Found := Process32First(sphandle, PStruct);
  while Found do
  begin
  if AnsiEndsText(ExeName, PStruct.szExefile) then
  begin
  Result := PStruct.th32ProcessID; Break;
  end;
  Found := Process32Next(sphandle, PStruct);
  end;
  CloseHandle(sphandle);
end;

还有在生成dll的部分在exports后面的begin和end.是有起到什么作用(是dll的初始化吗)?

library Insert;
uses
  Windows, Messages,
  publics in 'publics.pas',
  Thread in 'Thread.pas',
  JumpHook in 'JumpHook.pas';

procedure DLLProcess(dwReason: integer);
begin
  if dwReason=DLL_PROCESS_DETACH then
  begin
  if (TheNodeP<>nil) then UnmapViewOfFile(TheNodeP);
  if (FileMapH<>0) then CloseHandle(FileMapH);
  end;
end;

exports
  GetMsgHookOn, GetMsgHookOff, ThreadPro;

begin
  FileMapH := OpenFileMapping(FILE_MAP_ALL_ACCESS, False, 'HookExplorer8Mazi');
  if FileMaph<>0 then
  TheNodeP := MapViewOfFile(FileMapH, FILE_MAP_ALL_ACCESS, 0, 0, 0);
  DllProc := @DLLProcess;  
end.

[解决办法]
1,语法上没问题
2,是挂线程的吧
[解决办法]
2、就是运行代码的作用,相当于初始化
[解决办法]
1、请看下面这段函数怎么有2个Var和2个处理过程?

看了代码啊,没有什么啊,很正常啊! 

2、还有在生成dll的部分在exports后面的begin和end.是有起到什么作用(是dll的初始化吗)?

装载DLL时,在DLL中要运行的代码!

热点排行