ok schade zu früh gefreut
vieleicht hat noch mal jemand lust mir nen tipp zu geben
irgendwo haperts am zusammenspiel zwischen array und stack pointer
ok const array of ..
dann wird für den array eine adresse vom stack kopiert(move) und der array zeigt auf die adresse
problem ist das der array quasi auf das erste element zeigt.
bei nem Pchar wäre das zb halloallesisttoll
einen index weiter fehlen dann die ersten 4 bytes oallesisttoll wäre noch übrig usw
nächsten versuch das const wegzu lassen , funktioniert (theretisch) praktisch sieht das aber so aus das der compiler das parameter wo die rücksprung adresse steht,den register edx geschoben wird und dann runtergezählt wird bis 0 , das programm is irgendwo bei 40000 oder so und das überschreibt ja dann quasi den gesamten programcode
.
http://img224.imageshack.us/img224/8113/huk2vq1.png
in
asm würd ich mir vom ersten parameter adresse nehmen 0027FEF8 und dann immer 4 weitergehen , aber wie kann ich sowas schön ohne inline
asm realisieren
.
edit1:
-----------------------
als zwischenlösung bin ich jetzt bei dem kram angekommen
Delphi-Quellcode:
function translate(Buffer: Pointer; Format1: PChar;dwFirst:DWord):Integer;
cdecl;
var
i : Integer;
c : Integer;
ptr : 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
begin
ptr := @dwFirst;
LogToFileStr(PChar(Pointer(Cardinal(ptr)+4*(c-1) )^))
end;
if Format1[i+1] = '
%'
then
dec(c,2);
end;
//Result := SprintfOrg(Buffer,Format1,arg);
end;
ich werd über diesen counter c dann versuchen die parameter wieder auf den stack zu schaufen bevor ich die echte sprintf callen werde, aber ist das noch schön was ich da mache oder geht sowas nicht anders?