Ich muss auch gestehen, dass ich die letzte Zeile in diesem Thread gelöscht habe. In der stand: "Ich warte dann mal auf die Antwort von Zacherl, mit viel Glück hat er noch was übrig".
Habe leider nichts fertiges hier, aber zum iterieren der Sections schnell aus dem Kopf:
Delphi-Quellcode:
var
ImageBase: Pointer;
ImageDosHeader: PImageDosHeader;
ImageNtHeaders: PImageNtHeaders;
ImageSectionHeader: PImageSectionHeader;
I: Integer;
begin
ImageBase := Pointer(hInstance);
ImageDosHeader := PImageDosHeader(ImageBase);
if (ImageDosHeader^.e_magic <> IMAGE_DOS_SIGNATURE) then
begin
Exit;
end;
ImageNtHeaders := PImageNtHeaders(PByte(ImageDosHeader) + ImageDosHeader^._lfanew);
if (ImageNtHeaders^.Signature <> IMAGE_NT_SIGNATURE) then
begin
Exit;
end;
ImageSectionHeader := PImageSectionHeader(PByte(ImageNtHeaders) + SizeOf(TImageNtHeaders) -
SizeOf(TImageOptionalHeader) + ImageNtHeaders^.FileHeader.SizeOfOptionalHeader);
I := 1;
while (I < ImageNtHeaders^.FileHeader.NumberOfSections) do
begin
WriteLn('Section Name:');
WriteLn(PAnsiChar(@ImageSectionHeader^.Name[0]));
WriteLn('Virtual Address:');
WriteLn(IntToHex(NativeUInt(ImageBase) + ImageSectionHeader^.VirtualAddress,
SizeOf(Pointer) * 2));
WriteLn('Size:');
WriteLn(IntToHex(ImageSectionHeader^.SizeOfRawData, 1));
Inc(ImageSectionHeader);
Inc(I);
end;
end;
Statt hInstance kannst du auch die ImageBase einer beliebigen
Dll nehmen, falls du das brauchst. Die Section dumpst du dir dann einfach mit CreateFile/WriteFile über die Virtual Address.
Würde mich allerdings nicht drauf verlassen, dass sich alle Binaries an die .text bzw. .code Konvention bezüglich des Section Names halten.
Wow vielen Dank
Ja für .UPX etc. brauche ich ja keinen Support, schließlich dumpe ich ja die eigene Section und den Namen kann ich ja (wenn er wirklich != .text/.code sein sollte anpassen
Anonsten hast du mir das Leben erleichtert, ist schon eine ganze Weile her seitdem ich was mit w32
PE zeug gemacht habe, und ich vergesse leider schnell.
Ich schreibs später fertig, dann poste ich es mal
Bis dann & nochmals danke