Einzelnen Beitrag anzeigen

flash2009

Registriert seit: 15. Dez 2008
11 Beiträge
 
#15

Re: Wie baut man sowas wie writeln/sprintf selbst ?

  Alt 27. Dez 2008, 05:47
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] = 'sthen
    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?
  Mit Zitat antworten Zitat