Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi C++ zu delphi (https://www.delphipraxis.net/107279-c-zu-delphi.html)

k4ni 25. Jan 2008 02:35


C++ zu delphi
 
hey leute,

ich will diese c++ function in eine delphi function umwandeln:

Code:
 ULONG reentry_address = GetProcAddress( LoadLibrary("user32.dll"), "PostMessageA" ) + 5;

   __declspec(naked) void myPostMessageA(void)
   {
      __asm
      {
         mov edi,edi
         push ebp
         mov ebp,esp
         jmp [reentry_address]
      }
   }
und hab das erreicht:

Delphi-Quellcode:
function PostMessage1337(
hWnd:HWND;
MSG:UINT;
WPARAM:wParam;
LPARAM:lParam):BOOL;
var
  reentry_address: pointer;
  nub: Integer;
begin
reentry_address:=GetProcAddress( LoadLibrary('user32.dll'), 'PostMessageA');
Nub :=  integer(reentry_address)+5;
reentry_address := pointer(nub);

      asm
         mov edi,edi
         push ebp
         mov ebp,esp
         jmp reentry_address
      end;

Result := LongBool(Nub);
end;
Was ist daran falsch? beim compilen bekomm ich kein error aber dann beim ausführen. Hab schon viele sachen ausprobiert. k.A. was da falsch ist. Ich hoffe ihr könnt mir helfen. :)

danke :)
k4ni

QuickAndDirty 25. Jan 2008 07:11

Re: C++ zu delphi
 
Danke für diesen Quiz

k4ni 25. Jan 2008 14:47

Re: C++ zu delphi
 
Wieso Quiz ? Ich kriegs doch selber nich hin :(

Win32.API 25. Jan 2008 14:56

Re: C++ zu delphi
 
Du musst verhindern, dass delphi den stackframe zerstoert.

k4ni 25. Jan 2008 15:08

Re: C++ zu delphi
 
Ahh danke :)
Nur weis ich nicht wie das geht. Und wieso? in C macht ers ja auch nicht oder?

Win32.API 25. Jan 2008 15:17

Re: C++ zu delphi
 
Delphi-Quellcode:
__declspec(naked)
ist in delphi mit

Delphi-Quellcode:
asm
...
end;
zu vergleichen, also kannst du es in asm programmieren oder du laesst dir was anderes einfallen.

Neotracer64 25. Jan 2008 15:56

Re: C++ zu delphi
 
Delphi-Quellcode:
var
  pOrgPostMessage: Pointer;

function Secure_PostMessageA(hWnd:HWND ;MSG:UINT ;WPARAM: wParam; lPARAM:lParam):BOOL;stdcall;assembler;
asm
  jmp pOrgPostMessage
end;


procedure InitializeSecureApi;
begin
  pOrgPostMessage := Pointer(DWORD(GetProcAddress( GetModuleHandle('user32.dll'), 'PostMessageA'))+5);
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  InitializeSecureApi;
  Secure_PostMessageA(Application.Handle,WM_SYSCOMMAND,SC_MINIMIZE,0);
end;

k4ni 25. Jan 2008 16:04

Re: C++ zu delphi
 
Liste der Anhänge anzeigen (Anzahl: 1)
Danke!
Ich habs jetzt dann gleich mal getested mit:
Delphi-Quellcode:
Secure_PostMessageA(ms, Wm_keyDown, VK_Return, 0);
Secure_PostMessageA(ms, Wm_keyUp, VK_Return, 0);
es kommt ne AccessViolation sendet then key aber trotzdem. Idee?

Edit:
Mir ist aber aufgefallen das die address violation diesmal nicht von der user32.dll sondern von der application selber kommt.
[Bild im anhang]

Win32.API 25. Jan 2008 16:08

Re: C++ zu delphi
 
Wie soll das auch funktionieren? Diesmal wird garkein stackframe erzeugt ... Versuche doch erstmal zu verstehen was du da versuchst.



//Edit: sorry, hatte das stdcall nicht wahrgenommen

Neotracer64 25. Jan 2008 16:12

Re: C++ zu delphi
 
Funktioniert, wenn einige Bedingungen stimmen.(5 Bytes Hotpatch Fix vorhanden,...) Das "stdcall" induziert den Function Prolog.

Disassembly von Secure_PostMessageA:

Delphi-Quellcode:
0044C86C  $ 55             PUSH EBP
0044C86D  . 8BEC          MOV EBP,ESP
0044C86F  .-FF25 D8FB4400  JMP DWORD PTR DS:[44FBD8]               ; user32.7E36CB8A
Jedenfalls bei Delphi 7.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:24 Uhr.
Seite 1 von 2  1 2      

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