AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Constante als Paramter übergabe

Ein Thema von gizzy · begonnen am 29. Nov 2008 · letzter Beitrag vom 29. Nov 2008
Antwort Antwort
Benutzerbild von gizzy
gizzy

Registriert seit: 3. Jun 2007
59 Beiträge
 
Delphi 2007 Enterprise
 
#1

Constante als Paramter übergabe

  Alt 29. Nov 2008, 17:35
Hi Leute,

bin mal total verpeilt, aber ich bin mir sicher das ich das so nicht machen darf. Habt ihr ein Vorschlag folgendes zu Lösen (Nicht Dynmaisches Array Lösung ).


Delphi-Quellcode:
function sr_wchar_z(pid: Integer; offset: DWord; const count: Integer): PChar; stdcall;
var
  HandleWindow, Buffer : Cardinal;
  cleak : Array [0..count] of Char;
  leak : String;
  i : Byte;
begin
{Start}
  leak:= '';
{RM ~}
  HandleWindow := OpenProcess(PROCESS_VM_READ,False,pid);
  ReadProcessMemory(HandleWindow, Pointer(offset),@cleak, Sizeof(cleak), Buffer);
{CR ~}
  for i := 0 to count do
      leak:=leak+cleak[i];
  result:= Pchar(leak);
{End}
end;
David
[Fehler] Unit1.pas(1): Dein Kaffee ist kalt.
[Fehler] Unit1.pas(2): Dein linker großer Zeh ist eingeschlafen.
[Fataler Fehler] Projekt1.dpr(5): Verwendete Unit "Unit1.pas" kann nicht comiliert werden.
  Mit Zitat antworten Zitat
Noedel
(Gast)

n/a Beiträge
 
#2

Re: Constante als Paramter übergabe

  Alt 29. Nov 2008, 17:39
du hast count nicht definiert?!

welche fehlermeldung bekommst du denn
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#3

Re: Constante als Paramter übergabe

  Alt 29. Nov 2008, 17:42
Das geht gar nicht. "const count" besagt nur, dass der Wert innerhalb der Prozedur nicht verändert werden darf - aber das ist keinesfalls eine Konstante. Wo wäre auch der Sinn darin, eine Konstante als Parameter zu benutzen?
  Mit Zitat antworten Zitat
Benutzerbild von gizzy
gizzy

Registriert seit: 3. Jun 2007
59 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: Constante als Paramter übergabe

  Alt 29. Nov 2008, 17:42
Um die Länge meines Static-Arrays festzulegen.
David
[Fehler] Unit1.pas(1): Dein Kaffee ist kalt.
[Fehler] Unit1.pas(2): Dein linker großer Zeh ist eingeschlafen.
[Fataler Fehler] Projekt1.dpr(5): Verwendete Unit "Unit1.pas" kann nicht comiliert werden.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Constante als Paramter übergabe

  Alt 29. Nov 2008, 17:43
Zitat:
du hast count nicht definiert?!
Doch ist ein Parameter
Dieser ist aber keine Konstante, sondern ein konstanter ( nicht veränderbarer) Parameter
Ein dynamischer Array wäre ein optimale Lösung, warum willst du das nicht?
Sonst könntest du auch eine Liste verwenden
Markus Kinzler
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#6

Re: Constante als Paramter übergabe

  Alt 29. Nov 2008, 17:46
Zitat von gizzy:
Um die Länge meines Static-Arrays festzulegen.
Das geht aber nur mit Konstanten, nicht mit "änder mich bitte bitte nicht"-Parametern.

Zitat von mkinzler:
Sonst könntest du auch eine Liste verwenden
Das könnte schwer werden, wenn er einen Puffer für eine API-Funktion haben will

PS: du leakst Handles, dein Zusammenbau ist unnötig langsam und kompliziert (string SetLength, und dann das als Puffer verwenden wäre viel schöner), und deine Schleife ist eine Katastrophe, die nur auf den richtigen Moment wartet.. Denke count = 257
  Mit Zitat antworten Zitat
Benutzerbild von gizzy
gizzy

Registriert seit: 3. Jun 2007
59 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: Constante als Paramter übergabe

  Alt 29. Nov 2008, 17:50
Zitat von mkinzler:
Zitat:
du hast count nicht definiert?!
Doch ist ein Parameter
Dieser ist aber keine Konstante, sondern ein konstanter ( nicht veränderbarer) Parameter
Ein dynamischer Array wäre ein optimale Lösung, warum willst du das nicht?
Sonst könntest du auch eine Liste verwenden
Okáy, ich glaub ich sollte die DH nicht nur überfliegen, du hast Recht.

Weil ich mir nicht sicher war ob ReadProcessMemory das Variable genauso behandelt wie ein Dynamisches.
Ich hab es jetzt so gemacht:

Delphi-Quellcode:
function sr_wchar_z(pid: Integer; offset: DWord; count: SmallInt): PChar; stdcall;
var
  HandleWindow, Buffer : Cardinal;
  cleak : Array of Char;
  leak : String;
  i : Byte;
begin
{Start}
  SetLength(cleak, count);
  leak:= '';
{RM ~}
  HandleWindow := OpenProcess(PROCESS_VM_READ,False,pid);
  ReadProcessMemory(HandleWindow, Pointer(offset),@cleak, Sizeof(cleak), Buffer);
{CR ~}
  for i := 0 to count do
      leak:=leak+cleak[i];
  result:= Pchar(leak);
{End}
end;
David
[Fehler] Unit1.pas(1): Dein Kaffee ist kalt.
[Fehler] Unit1.pas(2): Dein linker großer Zeh ist eingeschlafen.
[Fataler Fehler] Projekt1.dpr(5): Verwendete Unit "Unit1.pas" kann nicht comiliert werden.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#8

Re: Constante als Paramter übergabe

  Alt 29. Nov 2008, 17:51
Zitat:
Delphi-Quellcode:
for i := 0 to count do
      leak:=leak+cleak[i];
Sicher, dass das so richtig ist?

[edit] Das müsste doch auch so funktionieren:
Delphi-Quellcode:
function sr_wchar_z(pid: Integer; offset: DWord; count: Cardinal): PChar; stdcall;
var
  HandleWindow, Buffer, deg : Cardinal;
// cleak : Array of Char;
  leak : String;
  i : Byte;
begin
{Start}
  SetLength(leak, count);
// leak:= '';
{RM ~}
  HandleWindow := OpenProcess(PROCESS_VM_READ,False,pid);
  ReadProcessMemory(HandleWindow, Pointer(offset),@leak[1], Length(leak), Buffer);
{CR ~}
{  for i := 0 to count do
      leak:=leak+cleak[i];}

  result:= Pchar(leak);
{End}
end;
[/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von gizzy
gizzy

Registriert seit: 3. Jun 2007
59 Beiträge
 
Delphi 2007 Enterprise
 
#9

Re: Constante als Paramter übergabe

  Alt 29. Nov 2008, 17:53
Mit dem Dynamischen Array hauts mir ne Zugriffsverletzung um die Ohren :/

http://download.eyecook.net/zugriffsv.jpg

//Ich lass das erstmal für heute :/
David
[Fehler] Unit1.pas(1): Dein Kaffee ist kalt.
[Fehler] Unit1.pas(2): Dein linker großer Zeh ist eingeschlafen.
[Fataler Fehler] Projekt1.dpr(5): Verwendete Unit "Unit1.pas" kann nicht comiliert werden.
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#10

Re: Constante als Paramter übergabe

  Alt 29. Nov 2008, 19:46
Hallo,

eine Funktion sollte niemals die Adresse einer lokalen Variablen (in diesem Fall leak) zurückgeben. Es wäre besser, den Puffer vom Aufrufer bereitstellen zu lassen.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Antwort Antwort


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 13:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz