Entwickler-Ecke
Sonstiges (Delphi) - C Code in Delphi übersetzen
Biarchiv - So 06.04.03 18:16
Titel: C Code in Delphi übersetzen
Hallo,
Wer kann mir diesen Code von C ins Delphi übersetzen?
Das ist glaube eine C procedure bitte in eine Delphi procedure.
Vielen Dank.
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63:
| LPE_STD_CODE EnlargeHeader(PE_INFO *pe) { LPE_STD_CODE ret = LPE_HANDLEDERROR; HWND hErrDlg = GetActiveWindow(); DWORD dwHSize, dwBuff, i; IMAGE_SECTION_HEADER *pS; HANDLE hFile; void *pMem; DWORD dwMemSize;
// possible ? // if (pe->pNTh->OptionalHeader.SizeOfHeaders >= 0x1000) if ( GetRealSizeOfHeaders( pe->pMap ) >= 0x1000 ) { ShowError(hErrDlg, "The maximum SizeOfHeaders (0x1000) is already reached !"); goto Exit; }
// move the sections 0x200 bytes back dwHSize = GetRealSizeOfHeaders(pe->pMap); dwMemSize = pe->dwFileSize - dwHSize; pMem = m(dwMemSize); if (!pMem) { ret = LPE_NOMEMORY; goto Exit; } memcpy(pMem, (void*)((DWORD)pe->pMap + dwHSize), dwMemSize); pe->pNTh->OptionalHeader.SizeOfHeaders = dwHSize + 0x200; pS = pe->pSech; for (i = 0; i < pe->pNTh->FileHeader.NumberOfSections; i++) { if (pS->PointerToRawData) // Watcom C/C++ pS->PointerToRawData += 0x200; ++pS; }
UnloadPEFile(pe); // unmapped !!!
hFile = GetFileHandle(pe->cPath, GFH_OPENEXISTING_RW); SetFilePointer(hFile, dwHSize + 0x200, 0, FILE_BEGIN); WriteFile( hFile, pMem, dwMemSize, &dwBuff, NULL); CloseHandle(hFile); f(pMem); if (LoadPEFile(pe) != LPEF_SUCCESS) { HandleRemapError(hErrDlg); goto Exit; }
// refresh PE info dlg ShowPEBaseInfo(hPEEditor);
ret = LPE_OK;
Exit: return ret; } |
MSCH - So 06.04.03 18:57
das wird dir nicht viel nützen, da einige Funktionen wie GetRealSizeOfHeaders, UnloadPEFile weder im API noch sonst wo zu finden sind. Die sind also auch zu übersetzen, nur wo ist der sourcecode?
Besser, welches Problem soll damit gelöst werden? So wie es aussieht, wird via MemoryMappedFiles eine PE-Exedatei analysiert. Da das PE-Format frei ist, sollte es kein Prob sein, es gleich in D umzusetzen.
grez
msch
Biarchiv - So 06.04.03 19:46
Hallo,
Der Sinn des Codes ist:
Er soll einen PEHeader von einer EXE vergrößern.
Also
SizeOfHeders auslesen + 200h / speichern
Alle Sektionen ermitteln und dort der RAWOffset + 200h / speichern
Am ende der letzen Sektion soll er nun 200h = 512 Bytes (alle 00h) einfügen.
Die Datei wird um 512 Bytes größer.
Wer könnte das in Delphi machen?
Tino - Mo 07.04.03 14:50
Hallo,
da ich mich mit PE-Header und so nicht auskenne wäre ich froh wenn Du mir erklären könntest was Deine Aufgabenstellung
Biarchiv hat folgendes geschrieben: |
Er soll einen PEHeader von einer EXE vergrößern.
Also
SizeOfHeders auslesen + 200h / speichern
Alle Sektionen ermitteln und dort der RAWOffset + 200h / speichern
Am ende der letzen Sektion soll er nun 200h = 512 Bytes (alle 00h) einfügen. |
für einen Zweck erfüllen soll.
Dank Dir!
Gruß
Tino
Biarchiv - Mo 07.04.03 15:54
Hallo,
Ich habe einen EXE-Protector Lizenz der eine Sektion hinzufügt.
Der aber Platz benötigt im PEHeader.
Genau so geht es laut Coder:
Bekomme werte für SizeOfHeaders, addiere 200h dazu und trage den Wert wieder ein.
Bekomme den Wert wieviele Sektionen die EXE hat.
Bekomme von jeder Sektion den RAWOffset und addiere 200h dazu und speichere.
Dann nach der Letzten Sektion 200h Bytes (512 Bytes) einfügen.
Datei wird dadurch 512 Bytes größer.
Aya - Mo 07.04.03 20:43
Biarchiv hat folgendes geschrieben: |
Ich habe einen EXE-Protector Lizenz der eine Sektion hinzufügt.
Der aber Platz benötigt im PEHeader.
|
Hä?? :)
Erklär mal genauer für die Aya *grinst lieb*
Au'revoir,
Aya~
Biarchiv - Mo 07.04.03 20:55
Hallo,
Ich habe einen EXE-Protector der beim Protecten eine Section in der EXE hinzufügt.
Allerdings wenn kein Platz im Header ist kann er nicht protecten.
Wenn ich aber SizeOfHeader selber vergröße kann er wieder protecten.
Manchen Compiler lassen keinen Platz
Tino - Di 08.04.03 11:20
Sorry, das ich Dir nicht helfen kann. Aber von Deinen letzten beiden Beiträgen weiß ich immer noch nicht was das für einen Sinn macht. Vielleicht kannst Du mir mal erklären warum Du etwas in dieser Section hinzufügen willst ?!?! Mich interessiert das Thema nämlich auch!
Gruß
Tino
ShadowCaster - Mo 02.06.03 10:35
@Biarchiv: Es reicht nicht, nur die SizeofHeaders zu vergrößern. Du musst noch einige andere Werte ändern. Ich arbeite gerade an einem PE-Explorer und werd ihn demnächst auf einer Homepage veröffentlichen. Der soll später diese Funktionalität auch haben. Also musst einfach mal was abwarten.
Die Homepage auf der er erscheinen wird ist
http://www.digital-wings.de
Biarchiv - Mo 02.06.03 12:49
Hallo ShadowCaster,
Danke für Deine Antwort.
Okay da warte ich noch gerne.
Kann ich dann diesen Teil des Sources haben oder
ist Open-Source.
ShadowCaster - Mo 02.06.03 12:51
Ich werd dir gern den Teil des Sources geben. Ansonsten ist das Programm allerdings kein OS ;)
Ich bin zudem froh, dass sich in dem Forum doch noch einige Leute einfinden, die in diesem Bereich programmieren, denn solche Personen zu finden ist nicht gerade einfach :wink:
Biarchiv - Mo 02.06.03 13:07
Hello ShadowCaster,
ja solche leute zu finden ist leider schwer.
Kenst du noch welche???
Wie gut kenst du dich aus?
Ich code gerade an einen PE-Protector und PE-Joiner.
Motzi - Mo 02.06.03 13:25
Ich hab für meinen X-Spy auch geplant Infos über Module (Dlls und Exe) auszugeben. Bin momentan aber erst mit anderen Teilen beschäftigt, das kommt erst noch....
w3seek - Mo 02.06.03 15:51
der Code uebersetzt nach delphi, alles was unbekannt ist hab ich entsprechend kommentiert:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114:
| const LPE_HANDLEDERROR = 0; LPE_NOMEMORY = 1; LPE_OK = 2; LPEF_SUCCESS = 0; GFH_OPENEXISTING_RW = 0; var hPEEditor: HWND; type PIMAGE_SECTION_HEADER = ^IMAGE_SECTION_HEADER; LPE_STD_CODE = Cardinal; PPE_INFO = ^TPE_INFO; TPE_INFO = record pNTh: ^IMAGE_NT_HEADERS; pMap: Pointer; pSech: PIMAGE_SECTION_HEADER; dwFileSize: DWORD; cPath: String; end;
function GetRealSizeOfHeaders(Map: Pointer): Cardinal; begin end;
procedure ShowError(hWnd: HWND; const Msg: String); begin end;
procedure HandleRemapError(hWnd: HWND); begin end;
procedure UnloadPEFile(pe: PPE_INFO); begin end;
function LoadPEFile(pe: PPE_INFO): Cardinal; begin end;
function GetFileHandle(const Path: String; dwMode: DWORD): THandle; begin end;
procedure ShowPEBaseInfo(hPEEditor: HWND); begin end;
function EnlargeHeader(pe: PPE_INFO): LPE_STD_CODE; var hErrDlg: HWND; dwHSize, dwBuff, i: DWORD; pS: PIMAGE_SECTION_HEADER; hFile: THandle; pMem: Pointer; dwMemSize: DWORD; begin Result := LPE_HANDLEDERROR; hErrDlg := GetActiveWindow; if (GetRealSizeOfHeaders(pe^.pMap) >= $1000) then begin ShowError(hErrDlg, 'The maximum SizeOfHeaders (0x1000) is already reached !'); Exit; end;
dwHSize := GetRealSizeOfHeaders(pe^.pMap); dwMemSize := pe^.dwFileSize - dwHSize; GetMem(pMem, dwMemSize); if not Assigned(pMem) then begin Result := LPE_NOMEMORY; Exit; end; Move(Pointer(DWord(pe^.pMap) + dwHSize)^, pMem^, dwMemSize); pe^.pNTh^.OptionalHeader.SizeOfHeaders := dwHSize + $200; pS := pe^.pSech; for i := 0 to pe^.pNTh^.FileHeader.NumberOfSections - 1 do begin if pS^.PointerToRawData <> 0 then Inc(pS^.PointerToRawData, $200); Inc(pS); end; UnloadPEFile(pe); hFile := GetFileHandle(pe^.cPath, GFH_OPENEXISTING_RW); SetFilePointer(hFile, dwHSize + $200, nil, FILE_BEGIN); WriteFile(hFile, pMem^, dwMemSize, dwBuff, nil); CloseHandle(hFile); FreeMem(pMem); if LoadPEFile(pe) <> LPEF_SUCCESS then begin HandleRemapError(hErrDlg); Exit; end; ShowPEBaseInfo(hPEEditor); Result := LPE_OK; end; |
ShadowCaster - Mo 02.06.03 17:22
So Biarchiv. Ich konnte dir das Ding leider heute nicht übersetzen aus Zeitmangel. Aber da war ja schon jemand so nett :wink: Was den PE-Explorer angeht, so komm ich sehr gut vorran und falls ich einige Fehler noch beheben kann, werd ich hier morgen mal die erste Version des sehr kleinen Programms veröffentlichen. News gibts dann immer im Forum oder auf der Homepage, wie ihr wollt. Natürlich wird es nicht bei einem PE-Explorer bleiben. Das Programm soll noch ziemlich erweitert werden und ich hab da noch so einiges geplant.
Also bis dann
Gruß
Shadow
ShadowCaster - Di 03.06.03 09:30
Ja, nur da sind noch einige Features mehr geplant wie Disassembler und Hexeditor, Hexcalculator, etc. Man soll auch PE-Files reparieren können, das Proggie soll Checksummen berechnen können, Sektionen und Recourcen extrahieren bzw. hinzufügen, etc. Das Ding soll das ultimative Helptool im Umgang mit Executables werden. Bis auf einen kleinen Bug ist der PE-Explorer jetzt fertig. Ich werd ihn nochmal überarbeiten und dann heut im Forum schonmal zum Downlaod bereitstellen. Die neuen Versionen gibt es dann auf meiner Homepage die nächsten Tage und Wochen.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!