AGB  ·  Datenschutz  ·  Impressum  







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

Problem mit C++ Pointern

Ein Thema von GOOFY009 · begonnen am 20. Dez 2009 · letzter Beitrag vom 25. Dez 2009
Antwort Antwort
GOOFY009

Registriert seit: 24. Okt 2009
20 Beiträge
 
#1

Problem mit C++ Pointern

  Alt 20. Dez 2009, 17:07
Hallo !

Ich habe mal wieder ein Problem mit der Portierung von C++ Code nach Delphi.... Denke ich zumind., da das Programm nicht die richtigen Ergebnisse zu liefern scheint.

Hier mal die C++ Deklarationen und Funktionen :
Delphi-Quellcode:
    DWORD read = 0;
    LPBYTE buffer = new BYTE[end-start];
    DWORD_PTR ptr;
    int *value;
    int *cmp;
    int k, add, tmp;
    int pattern;

    if (!buffer)
   return;
   pattern = 0xFE27C0;
   if(ReadProcessMemory(procHandle, (void*)start, buffer, end - start, &read) == NULL)
        return;
    else
    {
      if (start+2*sizeof(value) >= end)
         return;
      for(add = 0; add < (int)(end - start - 2*sizeof(value)); ++add)
      {
         value = (int*)&buffer[add];
         cmp = (int*)&buffer[add+4];
         if (*value == pattern && *cmp == 0)


......
Und hier mal meine bisheriger Delphi Code:
Delphi-Quellcode:
var
  read : DWORD;
  buffer : Array of PByte;
  ptr : Longint;
  value, cmp : ^Integer;
  k, add, tmp : Integer;
  pattern : Integer;
begin
  read := 0;
  SetLength(buffer,(ends-start));
  if (Length(buffer) = 0) then exit;
  pattern := $FE27C0;
  if not(ReadProcessMemory(m_ProgHandle, Pointer(start), buffer, ends - start, read)) then
       exit
    else begin
        if (start + (2 *sizeof(value)) >= ends) then
       exit;
        for add := 0 to Integer(ends - start - (2*sizeof(value)))-1 do begin
       value := @buffer[add];
       cmp := @buffer[add+4];
            if (value^ = pattern) and (cmp^ = 0) then begin


........
Eventuell habe ich ja mit den Pointern einen Fehler gemacht.. ?!
Bin für jede Hilfe dankbar!

CU
GOOFY
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Problem mit C++ Pointern

  Alt 20. Dez 2009, 17:16
"Array of Type" ist etwas Delphieigenes. Dahinter steckt eine Längeninformation etc.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
GOOFY009

Registriert seit: 24. Okt 2009
20 Beiträge
 
#3

Re: Problem mit C++ Pointern

  Alt 20. Dez 2009, 17:52
Zitat von SirThornberry:
"Array of Type" ist etwas Delphieigenes. Dahinter steckt eine Längeninformation etc.
Sorry... aber was soll mir das sagen ???

CU
GOOFY
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Problem mit C++ Pointern

  Alt 20. Dez 2009, 18:08
Das deine Übersetzung in der du "Array of" verwendest nicht richtig sein kann. Denn wenn "Array of" etwas Delphieigenes ist kann eine Übersetzung von C nach Delphi nicht "Array of" ergeben.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
GOOFY009

Registriert seit: 24. Okt 2009
20 Beiträge
 
#5

Re: Problem mit C++ Pointern

  Alt 20. Dez 2009, 18:13
OK ... und wie "übersetze" ich dann

LPBYTE buffer = new BYTE[end-start]; ?????

Laut dem was ich in Google so gefunden habe ist LPBYTE in Delphi ein PByte....

CU
GOOFY
  Mit Zitat antworten Zitat
Niko

Registriert seit: 23. Jun 2003
416 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Problem mit C++ Pointern

  Alt 21. Dez 2009, 15:50
Hi,

damit das mit dem dynamischen Array funktioniert, muss das etwa so aussehen:
Delphi-Quellcode:
var
  buffer: array of Byte;
{...}

ReadProcessMemory(m_ProgHandle, Pointer(start), @buffer[0], ends - start, @bytesRead)
"Electricity is actually made up of extremely tiny particles called electrons, that you cannot see with the naked eye unless you have been drinking." (Dave Barry)
  Mit Zitat antworten Zitat
GOOFY009

Registriert seit: 24. Okt 2009
20 Beiträge
 
#7

Re: Problem mit C++ Pointern

  Alt 25. Dez 2009, 12:26
Hi !

Danke für die Lösungsvorschläge (auch wenn diese mir direkt nicht geholfen haben).

Ich habe nun die Lösung des Problems hier im Board unter andere Stelle gefunden.

Delphi-Quellcode:
TDataBuffer = Array[0..0] of Byte;
PDataBuffer = TDataBuffer;

fDataBuffer : ^PDataBuffer;

CU

GOOFY
  Mit Zitat antworten Zitat
Niko

Registriert seit: 23. Jun 2003
416 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Problem mit C++ Pointern

  Alt 25. Dez 2009, 14:33
Das ist die andere Möglichkeit, wobei man üblicherweise PDataBuffer als Zeiger auf TDataBuffer deklariert. Dabei muss halt dann der notwendige Speicher mit GetMem reserviert werden.

Es spricht aber nichts dagegen, ein dynamisches Array und SetLength zu verwenden, wenn man darauf achtet, auch wirklich den Zeiger auf den Arrayinhalt zu übergeben, wie oben gezeigt.
"Electricity is actually made up of extremely tiny particles called electrons, that you cannot see with the naked eye unless you have been drinking." (Dave Barry)
  Mit Zitat antworten Zitat
GOOFY009

Registriert seit: 24. Okt 2009
20 Beiträge
 
#9

Re: Problem mit C++ Pointern

  Alt 25. Dez 2009, 16:09
Zitat von Niko:
Es spricht aber nichts dagegen, ein dynamisches Array und SetLength zu verwenden, wenn man darauf achtet, auch wirklich den Zeiger auf den Arrayinhalt zu übergeben, wie oben gezeigt.
Warum auch immer hat dies aber nicht funktioniert !?

Warum versteh ich auch nicht aber mit der wie oben geposteten Lösung klappt es :
Delphi-Quellcode:
TDataBuffer = Array[0..0] of Byte;
PDataBuffer = ^TDataBuffer;

var
 buffer : pDataBuffer;

begin

    GetMem(buffer,ends-start);


..................
GOOFY
  Mit Zitat antworten Zitat
nanix
(Gast)

n/a Beiträge
 
#10

Re: Problem mit C++ Pointern

  Alt 25. Dez 2009, 20:50
i am also having problems with C/C++ pointers

how would this look in delphi?

ULONG_PTR=^DWORD;
nPort:ULONG;
((PUCHAR)(ULONG_PTR)nPort);
  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 20:28 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