Thema: Delphi Inline Assembler

Einzelnen Beitrag anzeigen

WorstNightmare

Registriert seit: 6. Okt 2008
159 Beiträge
 
RAD-Studio 2010 Arc
 
#12

AW: Inline Assembler

  Alt 28. Okt 2010, 19:35
Welche Ausschnitte aus dem asm-Code brauchst du denn? Weiter nach oben oder nach unten?

Von meinem Code habe ich schon so ziemlich alles gepostet. Habe jetzt mal das stdcall weggenommen, bringt nichts.

Delphi-Quellcode:
const
  SEND_PACKET = $004BC877;

var
  SendPacketRet: Cardinal = SEND_PACKET + 5;

function JMP(iFrom, iTo: Cardinal): Cardinal;
begin
  Result := (iTo - iFrom) - 5;
end;

function GetModuleFromAddress(Address: Pointer): string;
var
  Res: HMODULE;
  Name: array[0..100] of AnsiChar;
begin
  GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, Address, Res);
  GetModuleBaseName(GetCurrentProcess, Res, Name, 100);
  Result := string(AnsiString(Name));
end;

procedure OnSendPacket(Ret: Pointer); stdcall;
var
  F: TextFile;
begin
  AssignFile(F, 'C:\test.txt');
  Append(F);
  Writeln(F, GetModuleFromAddress(Ret));
  CloseFile(F);
end;

procedure SendPacket;
asm
  mov eax, [ebp]
  mov eax, [eax+$04]
  push eax
  call OnSendPacket
  mov eax,$00BF0044
  jmp dword ptr [SendPacketRet]
end;

procedure InstallHook;
begin
  PByte(SEND_PACKET)^ := $E9;
  PCardinal(SEND_PACKET + 1)^ := JMP(SEND_PACKET, DWORD(@SendPacket));
end;
Und es liegt nicht an meinem allgemeinen Vorgehen; sobald ich das stdcall; wieder hinmache und den OnSendPacket call inklusive push eax auskommentiere geht alles, die Pakete werden gesendet.

Geändert von WorstNightmare (28. Okt 2010 um 19:38 Uhr)
  Mit Zitat antworten Zitat