Registriert seit: 15. Dez 2008
11 Beiträge
|
Re: Wie baut man sowas wie writeln/sprintf selbst ?
27. Dez 2008, 20:57
ok so sieht das aus und es funktioniert, ist nich ganz schön aber läuft =)
Delphi-Quellcode:
type
TSprintf = function(Buffer:Pointer;Format1:PChar;dwArray:DWord):Integer; cdecl;
implementation
var
SprintfOrg : TSprintf;
function translate(Buffer: Pointer; Format1: PChar;dwFirst:DWord):Integer; cdecl;
var
i : Integer;
c : Integer;
ptr1 : Pointer;
begin
c:= 0;
i := 0;
for i := 0 to (length(Format1)-1) do
if Format1[i] = ' %' then
begin
inc(c);
if Format1[i+1] = ' s' then // das ist nicht wichtig für die funktion
begin //von hier
ptr1 := @dwFirst;
LogToFileStr(PChar(Pointer(Cardinal(ptr1)+4*(c-1) )^))
end; //bis hier hin
if Format1[i+1] = ' %' then
dec(c,2);
end;
asm
push eax
push ebx
mov eax , c
@putonstack:
test eax , eax
je @stackok
lea ebx , dwFirst
shl eax , 2
add ebx , eax
shr eax , 2
sub ebx , 4 //first index = 0 not 1 !
sub eax , 1
push DWord ptr [ebx]
jmp @putonstack
@stackok:
push Format1
push Buffer
call SprintfOrg //call the orignal function
mov Result , eax
mov eax , c //Paremeter Counter
add eax , 2 //+ Buffer and Format
shl eax , 2 //Size each 4bytes
add esp , eax //fix stack because of cdecl
pop ebx
pop eax
end;
end;
greetz flash
|
|
Zitat
|