Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-04-2011
broly7 broly7 is offline
Miembro
 
Registrado: jun 2008
Posts: 43
Poder: 0
broly7 Va por buen camino
Cita:
Empezado por escafandra Ver Mensaje
Mira esto.

Saludos.
No tengo ni idea de programar en C jajaja.
De todas formas he encontrado algo parecido que trabaj de forma parecida a la mía pero no consigo que encuentre una cadena de mas de 1 Byte.

Código Delphi [-]
 var
fs: TFileStream;
Buff: Array [0..10239] of Byte; // a 10Kb Array
b: Byte;
FP, MP: Integer; // FilePos and MemoryPos
i: Integer;
ReadBytes: Integer;
begin

fs := TFileStream.Create(Extractfilepath(application.exename)+'prueba.dat', fmOpenReadWrite);

FP := 0;
b := Ord($FF);
while fs.Position < fs.Size do
begin
ReadBytes := fs.Read(Buff, SizeOf(Buff));
// scan the buffer for #FF bytes
for i := 0 to ReadBytes - 1 do
begin
if (Buff[i] = ($AA)) then
begin
// Set the file pointer to the right place
fs.Seek(FP + i, soFromBeginning);
fs.Write(b, 1);
end;
end;
end;
FP := FP + SizeOf(Buff);
// set the file pointer to the start of the next block
fs.Seek(FP, soFromBeginning);
Fs.Free;
end;

Esto cambia todos los hexabytes AA por FF. Pero para una cadena como $AABBCCDD no sé cómo hacerlo =/
Responder Con Cita
  #2  
Antiguo 12-04-2011
Avatar de Red_Leon
Red_Leon Red_Leon is offline
Miembro
 
Registrado: oct 2007
Ubicación: Castilla la Mancha
Posts: 27
Poder: 0
Red_Leon Va por buen camino
Deberias comprobar como minimo que

Código Delphi [-]

if (i + 4 and ((Buff[i] = ($AA)) and ((Buff[i+1] = ($BB)) and ((Buff[i] = ($CC)) then
begin
...
end;

Es lo que te decia anteriormente coger el archivo como un Stream.
Responder Con Cita
  #3  
Antiguo 13-04-2011
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cita:
Empezado por broly7 Ver Mensaje
No tengo ni idea de programar en C jajaja.
Código:
procedure Replace(Buffer, Val, newVal: PBYTE; SizeBuffer, SizeVal: cardinal);
var
  n, i: cardinal;
begin
   for n:= 0 to SizeBuffer-1 do
   begin
      if PBYTE((cardinal(Buffer) + n))^ = Val^ then
      begin
         for i:= 1 to SizeVal-1 do
           if PBYTE(cardinal(Buffer)+n+i)^ <> PBYTE(cardinal(Val)+i)^ then  break;
         if i=sizeVal then
           CopyMemory(PBYTE(cardinal(Buffer)+n), newVal, SizeVal);
      end;
   end;
end;
Saludos.
Responder Con Cita
  #4  
Antiguo 13-04-2011
broly7 broly7 is offline
Miembro
 
Registrado: jun 2008
Posts: 43
Poder: 0
broly7 Va por buen camino
SOlucionado. Esta web es sencillamente increible, justo lo que buscaba y muy bien explicado:http://www.underground.mn/showthread.php?t=203322

Saludos.
Responder Con Cita
  #5  
Antiguo 14-04-2011
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Vista la necesidad, publico la traducción del código publicado aquí.
Código Delphi [-]
procedure Replace(Buffer, Val, newVal: PBYTE; SizeBuffer, SizeVal: cardinal);
var
  n, i: cardinal;
begin
   for n:= 0 to SizeBuffer-1 do
   begin
      if PBYTE((cardinal(Buffer) + n))^ = Val^ then
      begin
         for i:= 1 to SizeVal-1 do
           if PBYTE(cardinal(Buffer)+n+i)^ <> PBYTE(cardinal(Val)+i)^ then  break;
         if i=sizeVal then
           CopyMemory(PBYTE(cardinal(Buffer)+n), newVal, SizeVal);
      end;
   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  MS: TMemoryStream;
begin
   MS:= TMemoryStream.Create;

   MS.LoadFromFile('project1.exe');
   Replace(MS.Memory, PBYTE(PCHAR('hola')), PBYTE(PCHAR('casa')), MS.Size, 4);
   MS.SaveToFile('prueba.exe');

   MS.destroy;

end;


Saludos.
Responder Con Cita
Respuesta



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
Buscar y reemplazar en el registro aom Varios 2 21-09-2006 13:50:06
Buscar y/o reemplazar una celda en Excel... fcios Servers 2 14-12-2005 16:33:27
Buscar y Reemplazar Xianto Varios 3 24-01-2005 20:29:43
Buscar y Reemplazar en un ADOTable rjsitruiz Conexión con bases de datos 1 01-06-2004 22:52:27
Buscar y reemplazar sur-se Servers 2 16-04-2004 18:36:16


La franja horaria es GMT +2. Ahora son las 06:20:57.


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