AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Wie baut man sowas wie writeln/sprintf selbst ?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie baut man sowas wie writeln/sprintf selbst ?

Ein Thema von flash2009 · begonnen am 25. Dez 2008 · letzter Beitrag vom 27. Dez 2008
 
flash2009

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

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

  Alt 27. Dez 2008, 18:52
Zitat von Cyf:
Ich muss grad zugeben, dass ich nicht so ganz folgen kann, was du überhaupt erreichen willst, aber bedenke dass (im Bezug auf array of const):

a) ein PChar sich nicht mitten im Array befindet, sondern nur ein Zeiger auf den Anfang des Strings und dieser dann irgendwo im Speicher ist, dieser ist selbst nur insgesamt 4 Byte groß
b) in einem array of const jedes Element ein 8 Byte großes TVarRec ist
c) die im TVarRec übergeben Zeiger offenbar nur im Scope der Funktion gültig sind (siehe obiger Link)

Kannst du nochmal kurz und knapp erklären, warum du den Stackpointer manuell manipulieren musst und was es mit deiner DLL auf sich hat?

Ok ich hab alle Posts gelesen und werd mal hier wieder ansetzen.
-------------
Zu erst, ich hab nen Hook entwickelt der die Original Api(function) mit meiner function austauscht und die Original function trozdem noch verfügbar hält um Parameter oder rückgabe Werte zu ändern bevor der Original Code weiter läuft. (der hook ist fertig und eigentlich perfekt, einzige Einschränkung er kann nur functions hooken die in Visual Studio gemacht wurden aber das ist jetzt ne Nebensache.)
-------------
So jetzt zu sprinft die ich hooken will, eine function aus der c++ library
int sprintf ( char * str, const char * format, ... );

Rückgabewert (Integer), Parameter(Pointer auf einen Buffer,ein PChar, eine beliebige Anzahl an Parametern), das ganze ist Standard c++ also cdecl (Parameter von rechts nach links pushen und der Stack wir vom Code der die function called wieder bereinigt(add esp, .. ) )
-------------
So jetzt das Problem ist jetzt dieses ... hierbei handelt es sich um sowas wie nen Array aber das Problem ist das ein const array of.. , genau wie call by reference(var ...) nen Pointer auf ne Array struktur übergibt und das geht da leider nicht. Ohne const ist Delphi wiederum nicht in der Lage zu erkennen wie lang der Array ist.

Mein Ansatz war nun das erste Parameter zu nehmen zb nen DWord der hat 4 Byte und über ein @ and die Adresse zu kommen , somit hab ich die Adresse vom ersten Parameter alle weiteren sind immer 4 Bytes weiter.Das ist jetzt nicht schön aber funktioniert schonmal.

gruß flash
Angehängte Grafiken
Dateityp: png huk2vq1_871.png (18,0 KB, 2x aufgerufen)
Dateityp: png hukiw1_105.png (13,0 KB, 1x aufgerufen)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz