、あなたは、Delphi組み込みアセンブラを使用して、単一のアセンブラ命令CALL EBX
のマシンコードを取得します。
function CodeToBytes: TBytes;
var
StartAddr, EndAddr: Pointer;
begin
asm
LEA EAX, @@start
MOV StartAddr, EAX
LEA EAX, @@end
MOV EndAddr, EAX
JMP @@end
@@start:
CALL EBX
@@end:
end;
SetLength(Result, Integer(EndAddr)-Integer(StartAddr));
Move(StartAddr^, Pointer(Result)^, Length(Result));
end;
はもちろん、あなたが開始と終了ラベルの間で好きな固執することができます:それは価値があるものを、私はSergの答えの重複を避けるだろうし、このようにそれを書くために
function CodeSize: Integer;
asm
lea EAX, @@end
lea EDX, @@start
sub EAX, EDX
JMP @@end
@@start:
call EBX
@@end:
end;
procedure Code;
asm
call EBX
end;
function CodeToBytes: TBytes;
var
I, N: Integer;
P: PByte;
begin
N:= CodeSize;
SetLength(Result, N);
P:= @Code;
for I:= 0 to N - 1 do begin
Result[I]:= P^;
Inc(P);
end;
end;
アセンブラが組み込まれた言語を使用している場合は、そのアセンブラを使用しないでください。 – hvd
さまざまな理由があります。しかし、あなたの返事に感謝します。 –
そのようなものを探していますか? http://www.delphibasics.info/home/delphibasicssnippets/executingpreparedshellcodeindelphi – bummi