![]() |
Compiler ändert asm Code ?
Hallo,
ich benutze folgende Funktion um meinen Hook zu überspringen.
Delphi-Quellcode:
Warum macht der Compiler dann folgenden Code daraus, bzw. wie kann ich verhindern das er es macht ?
function xPostMessage(hWnd: hWnd; Msg: UINT; wParam: wParam; lParam: lParam): BOOL; stdcall;
asm mov edi, edi push ebp mov ebp, esp jmp OldDllFunc end;
Code:
Wie man sieht hat er einiges geändert.
003A5C60 G> $ 55 push ebp
003A5C61 . 8BEC mov ebp, esp 003A5C63 . 89FF mov edi, edi 003A5C65 . 55 push ebp 003A5C66 . 89E5 mov ebp, esp 003A5C68 . FF25 70FF3A00 jmp near dword ptr [3AFF70] |
Re: Compiler ändert asm Code ?
Ich finde das auch extrem lästig. In C++ würde man das mit __declspec(naked) lösen; in Delphi gibt es das nicht. Als hässlichen Workaround kannst du die Parameter sowie das stdcall weglassen. Wenn du die Funktion dann aus Delphi-Code aufrufen willst, nimmst du @xPostMessage und castest in einen entsprechenden Funktionszeigertypen, sodass du die Funktion mit Parametern aufrufen kannst.
|
Re: Compiler ändert asm Code ?
Schlüsselwort [oh]assembler;[/oh] vor stdcall; angeben.
|
Re: Compiler ändert asm Code ?
Was ist der Sinn von mov edi, edi?
Meinst Du mov edi, [edi]? |
Re: Compiler ändert asm Code ?
mov edi, edi steht auch am Anfang der meisten WinAPI-Funktionen und erleichtert erneutes Hooken - zumindest, wenn sich vor der Funktion noch fünf ungenutzte Bytes befinden.
|
Re: Compiler ändert asm Code ?
Zitat:
|
Re: Compiler ändert asm Code ?
Zitat:
|
Re: Compiler ändert asm Code ?
Zitat:
|
Re: Compiler ändert asm Code ?
Also ich hab jetzt ne einfache Möglichkeit gefunden.
wenn ich es so mache ...
Delphi-Quellcode:
wird daraus ...
function xPostMessage(hWnd: hWnd; Msg: UINT; wParam: wParam; lParam: lParam): BOOL; stdcall;
asm mov edi, edi jmp OldDllFunc end;
Code:
und es funktioniert.
003A5C60 G> $ 55 push ebp
003A5C61 . 8BEC mov ebp, esp 003A5C63 . 89FF mov edi, edi 003A5C65 . FF25 70FF3A00 jmp near dword ptr [3AFF70] |
Re: Compiler ändert asm Code ?
Das ändert am zugrunde liegenden Problem rein gar nichts. Nebenbei bemerkt kannst du dein mov edi, edi jetzt tatsächlich ersatzlos streichen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz