Imas pravo.. za broj sekcija:
Code:
program Project3;
{$APPTYPE CONSOLE}
uses
SysUtils, Windows, ImageHlp;
var
imageinfo: LoadedImage;
pExportDirectory: PImageExportDirectory;
dirsize:Cardinal;
begin
if MapAndLoad(PChar('c:\prog.exe'), nil, @imageinfo, True, True) then
begin
WriteLn('Broj sekcija: '+IntToStr(imageinfo.NumberOfSections));
pExportDirectory := ImageDirectoryEntryToData(imageinfo.MappedAddress,
False, IMAGE_DIRECTORY_ENTRY_EXPORT, dirsize);
//sad se tu jos nalaze neki podaci
UnMapAndLoad(@imageinfo);
end;
ReadLn;
end.
A evo iskopao sam fju za vadjenje imena, broja funkcija u DLL-ovima:
Code:
procedure ListDLLExports(const FileName: string; List: TStrings);
type
TDWordArray = array [0..$FFFFF] of DWORD;
var
imageinfo: LoadedImage;
pExportDirectory: PImageExportDirectory;
dirsize: Cardinal;
pDummy: PImageSectionHeader;
i: Cardinal;
pNameRVAs: ^TDWordArray;
Name: string;
begin
List.Clear;
if MapAndLoad(PChar(FileName), nil, @imageinfo, True, True) then
begin
try
pExportDirectory := ImageDirectoryEntryToData(imageinfo.MappedAddress,
False, IMAGE_DIRECTORY_ENTRY_EXPORT, dirsize);
if (pExportDirectory <> nil) then
begin
pNameRVAs := ImageRvaToVa(imageinfo.FileHeader, imageinfo.MappedAddress,
DWORD(pExportDirectory^.AddressOfNames), pDummy);
for i := 0 to pExportDirectory^.NumberOfNames - 1 do
begin
Name := PChar(ImageRvaToVa(imageinfo.FileHeader, imageinfo.MappedAddress,
pNameRVAs^[i], pDummy));
List.Add(Name);
end;
end;
finally
UnMapAndLoad(@imageinfo);
end;
end;
end;
Hm, takodjer ima i par odlicnih struktura za takve stvari:
DEBUG_EVENT
-evo sta se sve s njim moze pratit:
typedef struct _DEBUG_EVENT {
DWORD dwDebugEventCode;
DWORD dwProcessId;
DWORD dwThreadId;
union {
EXCEPTION_DEBUG_INFO Exception;
CREATE_THREAD_DEBUG_INFO CreateThread;
CREATE_PROCESS_DEBUG_INFO CreateProcessInfo;
EXIT_THREAD_DEBUG_INFO ExitThread;
EXIT_PROCESS_DEBUG_INFO ExitProcess;
LOAD_DLL_DEBUG_INFO LoadDll;
UNLOAD_DLL_DEBUG_INFO UnloadDll;
OUTPUT_DEBUG_STRING_INFO DebugString;
RIP_INFO RipInfo;
} u;
} DEBUG_EVENT;
i CONTEXT (sa kojim se mogu kontrolirat registri)
Ima jos struktura:
http://msdn.microsoft.com/libr...reos5/html/wce50lrfcontext.asp
Jos cu pogledat onaj JCL kad ulovim vremena!!
eDiTišN:
Na koji nacin se moze dumpovat neki fajl u memoriji, recimo da nadjem handle fajla pa da ga iscitam sa ReadProcessMemory i onda taj dio da spremim kao .exe, i jednio sto ostaje popravit IAT tablicu (imort fje), za to ima onaj zgodan program ImpRec, sad kako pak to da se ugradi?!
[Ovu poruku je menjao qwertzuiopasdfghjkl dana 15.05.2006. u 21:27 GMT+1]