AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Compiler ändert asm Code ?

Ein Thema von TKC · begonnen am 14. Sep 2009 · letzter Beitrag vom 9. Mai 2010
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von TKC
TKC

Registriert seit: 21. Apr 2004
Ort: Tuningen
367 Beiträge
 
Delphi XE2 Enterprise
 
#1

Compiler ändert asm Code ?

  Alt 14. Sep 2009, 10:47
Hallo,

ich benutze folgende Funktion um meinen Hook zu überspringen.

Delphi-Quellcode:
function xPostMessage(hWnd: hWnd; Msg: UINT; wParam: wParam; lParam: lParam): BOOL; stdcall;
asm
      mov edi, edi
      push ebp
      mov ebp, esp
      jmp OldDllFunc
end;
Warum macht der Compiler dann folgenden Code daraus, bzw. wie kann ich verhindern das er es macht ?

Code:
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]
Wie man sieht hat er einiges geändert.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Compiler ändert asm Code ?

  Alt 14. Sep 2009, 10:53
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.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#3

Re: Compiler ändert asm Code ?

  Alt 14. Sep 2009, 11:07
Schlüsselwort [oh]assembler;[/oh] vor stdcall; angeben.
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#4

Re: Compiler ändert asm Code ?

  Alt 14. Sep 2009, 11:32
Was ist der Sinn von mov edi, edi?
Meinst Du mov edi, [edi]?
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Compiler ändert asm Code ?

  Alt 14. Sep 2009, 11:38
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.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Compiler ändert asm Code ?

  Alt 14. Sep 2009, 12:19
Zitat von Muetze1:
Schlüsselwort [oh]assembler;[/oh] vor stdcall; angeben.
Und in welchen Delphi-Versionen funktioniert das? In D7 schon mal nicht.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von TKC
TKC

Registriert seit: 21. Apr 2004
Ort: Tuningen
367 Beiträge
 
Delphi XE2 Enterprise
 
#7

Re: Compiler ändert asm Code ?

  Alt 14. Sep 2009, 13:32
Zitat von Muetze1:
Schlüsselwort [oh]assembler;[/oh] vor stdcall; angeben.
Also in Delphi 2010 funktioniert das auch nicht !
  Mit Zitat antworten Zitat
Benutzerbild von TKC
TKC

Registriert seit: 21. Apr 2004
Ort: Tuningen
367 Beiträge
 
Delphi XE2 Enterprise
 
#8

Re: Compiler ändert asm Code ?

  Alt 14. Sep 2009, 13:32
Zitat von Apollonius:
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.
Klingt etwas umständlich aber ich werde es einmal versuchen.
  Mit Zitat antworten Zitat
Benutzerbild von TKC
TKC

Registriert seit: 21. Apr 2004
Ort: Tuningen
367 Beiträge
 
Delphi XE2 Enterprise
 
#9

Re: Compiler ändert asm Code ?

  Alt 14. Sep 2009, 13:36
Also ich hab jetzt ne einfache Möglichkeit gefunden.

wenn ich es so mache ...
Delphi-Quellcode:
function xPostMessage(hWnd: hWnd; Msg: UINT; wParam: wParam; lParam: lParam): BOOL; stdcall;
 asm
      mov edi, edi
      jmp OldDllFunc
end;
wird daraus ...

Code:
003A5C60 G> $  55                push   ebp
003A5C61    . 8BEC             mov    ebp, esp
003A5C63    . 89FF             mov    edi, edi
003A5C65    . FF25 70FF3A00     jmp    near dword ptr [3AFF70]
und es funktioniert.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Compiler ändert asm Code ?

  Alt 14. Sep 2009, 13:44
Das ändert am zugrunde liegenden Problem rein gar nichts. Nebenbei bemerkt kannst du dein mov edi, edi jetzt tatsächlich ersatzlos streichen.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz