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中要运行的代码!