Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-03-2017
0x90 0x90 is offline
Registrado
 
Registrado: jun 2016
Posts: 5
Poder: 0
0x90 Va por buen camino
Convertir C++ a Delphi

Hola Compañeros de ClubDelphi,

Por este medio quisiera expresarme y pedir una mano de ayuda, pasa que estoy trabajando en un codigo fuente que esta hecho en C++ y ando tratando de trasladarlo / convertirlo a Delph, La version del codigo que tengo es en C++, para mi es facil de entender porque he trabajado mas con C++ que con el mismo Delphi, ahora, ya que llevo poco tiempo aprendiendo y desarrollandome en Delphi pues se me hace un poco dificil convertir solo una parte del codigo, y aqui es donde me he quedado.

Aqui les voy a dejar el codigo fuente en cuestion el cual estoy tratando de trasladar.

Código:
#include "stdafx.h"
#include "windows.h"
#include "stdio.h"

#define MemorySectionName         0x2
#define MemoryBasicVlmInformation 0x3

struct UNICODE_S
{
	unsigned short len;
	unsigned short man_len;
	wchar_t* pStr;
};
struct MEMORY_BASIC_VLM_INFORMATION
{
	unsigned long ImageBase;
	unsigned long blah[0x2];
	unsigned long SizeOfImage;
};
extern "C"
{
	int __stdcall ZwQueryVirtualMemory(HANDLE,void*,int,void*,int,unsigned long*);
}
int main(int argc, char* argv[])
{
	SYSTEM_INFO SI={0};
	GetSystemInfo(&SI);
	unsigned long min_addr=(unsigned long)(SI.lpMinimumApplicationAddress);
	unsigned long max_addr=(unsigned long)(SI.lpMaximumApplicationAddress);
	UNICODE_S* p = (UNICODE_S*) LocalAlloc(LMEM_ZEROINIT, 0x1000);  //allocate one page, to receive image file name
	for(unsigned long i = min_addr; i <= max_addr; i += (SI.dwPageSize))
	{
		MEMORY_BASIC_INFORMATION MBI={0};
		if(VirtualQuery((void*)i,&MBI,sizeof(MBI)))
		{
			 if(MBI.Type==MEM_IMAGE)
			 {
				 ZwQueryVirtualMemory(GetCurrentProcess(),(void*)i,MemorySectionName,p,0x1000,0);
				 wprintf(L"Module: %s\r\n",p->pStr);

				 unsigned long out=0;
	             		 MEMORY_BASIC_VLM_INFORMATION MBVI={0};
				 ZwQueryVirtualMemory(GetCurrentProcess(),(void*)i,MemoryBasicVlmInformation,&MBVI,sizeof(MBVI),&out);
				 unsigned long IB=MBVI.ImageBase;
				 wprintf(L"  at:%X",IB);
				 unsigned long szImage=MBVI.SizeOfImage;
				 wprintf(L"  size:%X\r\n",szImage);
				 i+=szImage;
			 }
		}	
	}	
	return 0;
}
Y aqui es lo que ya tengo hecho:

Código Delphi [-]
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    cbb1: TComboBox;
    Label1: TLabel;
    ListBox1: TListBox;
    Button1: TButton;
    btn1: TButton;
    procedure btn1Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

type
       _UNICODE_S = record
         len : Word;
         man_len  : Word;
         pStr  : PWideChar;
     end;

     type
        _MEMORY_BASIC_VLM_INFORMATION = record
          ImageBase : LongWord;
          Suits : array[$0..$2] of LongWord;
          SizeOfImage : LongWord;
      end;

     var
     UNICODE_S : _UNICODE_S;
     MEMORY_BASIC_VLM_INFORMATION : _MEMORY_BASIC_VLM_INFORMATION;

type
    NTSTATUS = LongInt;
    TProcFunction = function(ProcHandle: THandle): NTSTATUS; stdcall;

implementation

uses
  JclSysInfo, JclRegistry, JwaNative, JwaWinType, JwaPsApi;

{$R *.dfm}

const MemorySectionName         = $2;
const MemoryBasicVlmInformation = $3;
const LHND = $0042;
const LMEM_FIXED = $0000;
const LMEM_MOVEABLE = $0002;
const LMEM_ZEROINIT = $0040;
const LPTR = $0040;
const NONZEROLHND = $0002;
const NONZEROLPTR = $0000;

var
  //NTSTATUS ZwQueryVirtualMemory(HANDLE ProcessHandle, PVOID BaseAddress, MEMORY_INFORMATION_CLASS MemoryInformationClass, PVOID MemoryInformation, SIZE_T MemoryInformationLength, PSIZE_T ReturnLength);
  ZwQueryVirtualMemory: function(ProcessHandle: HANDLE; BaseAddress: PVOID; MemoryInformationClass: MEMORY_INFORMATION_CLASS; MemoryInformation: PVOID; MemoryInformationLength: ULONG; ReturnLength: PULONG): NTSTATUS; stdcall;

procedure TForm1.btn1Click(Sender: TObject);
begin
  // Processes
  cbb1.Items.BeginUpdate;
  try
    cbb1.Items.Clear;
    RunningProcessesList(cbb1.Items);
  finally
    cbb1.Items.EndUpdate;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  lpSystemInfo: _SYSTEM_INFO;
  min_addr: ULONG;
  max_addr: ULONG;
  LibHandle: THandle;
  p: _UNICODE_S;
  LocalAlloc: TProcFunction;
begin
   LibHandle := SafeLoadLibrary('Kernel32.dll');

   if LibHandle <> 0
   then
     begin
       @LocalAlloc  := GetProcAddress(LibHandle, 'LocalAlloc');
       GetSystemInfo(lpSystemInfo);
       min_addr := dword(lpSystemInfo.lpMinimumApplicationAddress);
       max_addr := dword(lpSystemInfo.lpMaximumApplicationAddress);
       //UNICODE_S* p = (UNICODE_S*) LocalAlloc(LMEM_ZEROINIT, 0x1000);
       //Aqui es donde me estoy estancando.
     end
   else
     begin
       //NIL
     end;
end;

end.

bueno hasta aqui mi peticion, quiero aclarar para que nadie se ofenda, no pretendo que me den todo en la boca con una cuchara ("spoonfeeding") o digan "vino aqui para que le hagamos el codigo", nada de eso, si ven la gran parte del codigo ya lo tengo bastante dominado (a mi parecer) lo que quisiera es una mano, en como podria implementar la siguiente parte que me resta.

Bueno hasta aqui los dejo.

Saludos,
0x90
Responder Con Cita
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Convertir hilo de c++ a Delphi Philip.ISR Varios 2 18-08-2012 20:13:28
Convertir cabecera de C a Delphi LoPiTaL Varios 1 18-05-2012 08:52:46
Convertir aplicacion Delphi en Web Luis Cuenca .NET 2 20-04-2009 08:56:41
Convertir de C++ a Delphi Alliance Varios 4 10-11-2008 23:24:06
AnyNET-Delphi Beta2: Una herramienta para convertir de .NET a Delphi.NET mamcx Noticias 3 01-10-2005 01:27:09


La franja horaria es GMT +2. Ahora son las 16:43:56.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi