Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Agregar peso vacio a un ejecutable (https://www.clubdelphi.com/foros/showthread.php?t=86529)

JuanOrtega 26-08-2014 23:34:13

Agregar peso vacio a un ejecutable
 
Hola estoy por volverme loco con este problema , hace dos dias que estoy tratando de buscar informacion de como abrir un archivo y agregarle peso vacio a un archivo ejecutable que es lo que originalmente hace este codigo en C#.

Codigo C#

Código:

            byte[] b = new byte[50 * 1024]; /* 50 kb */
            FileStream fS = File.Open("test.exe", FileMode.Append);
            fS.Write(b, 0, b.Length);
            fS.Close();

Lo peor es que el codigo en C# funciona perfecto y son solo cuatro lineas cuando en delphi eh hecho mas y termino arruinando el archivo ejecutable.

Inicialemente intente con :

Código:

procedure SaveBytesToFile(const Data: TBytes; const FileName: string);
var
  stream: TMemoryStream;
begin
  stream := TMemoryStream.Create;
  try
    if length(data) > 0 then
      stream.WriteBuffer(data[0], length(data));
    stream.SaveToFile(FileName);
  finally
    stream.Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
SaveBytesToFile(1024,'test.exe');
end;

Pero el problema con este codigo es que no encuentro y no se que tengo que poner en el valor TBytes en el primer argumento que supongo que
es el peso que quiero agregar puse 1024 pero da error y no encuentro informacion de que valor tengo que poner.

Tambien intente con este codigo :

Código:

procedure TForm1.Button1Click(Sender: TObject);
var  fs:tfilestream;
      buffer:integer;
begin

fs.create('test.exe',fmcreate);
fs.writebuffer(buffer,'1024');
fs.free;

end;

Intente en este codigo agregar 1024 bytes pero en este intento termino arruinando el ejecutable.

¿ Que estoy haciendo mal ?

ecfisa 26-08-2014 23:56:10

Hola Lepuke.

Intenta de este modo:
Código Delphi [-]
var
  buf: array[0..50*1024] of Byte;
begin
  with TFileStream.Create('test.exe', fmOpenReadWrite) do
  try
    Seek(0, soFromEnd);
    FillChar(buf, SizeOf(buf), 0);
    Write(buf, SizeOf(buf));
  finally
    Free;
  end;
end;

Saludos :)

JuanOrtega 27-08-2014 00:14:20

funciona excelente ecfisa , gracias por la ayuda , te queria preguntar sobre esta linea :
Código:

var  buf: array[0..50*1024] of Byte;
el tema es que cuando haga personizable el programa necesito tener el valor 1024 en un edit1 y desde el var parece que no puedo hacerlo porque hago :

Código:

var  buf: array[0..50*edit1.Text] of Byte;
¿ hay alguna forma de establecer el valor del byte buf en otro lado donde pueda ponerle el valor de 1024 desde una caja de texto ? , te lo pregunto porque creo que no se puede poner el valor justo cuando esta en la parte de var.

Acabo de tratar de hacer lo que queria pero esta mal mira :

Código:

procedure TForm1.Button1Click(Sender: TObject);
var
  buf: array of Byte;
begin
  buf:= array[0..50*edit1.Text];
end;

gracias por responder

mamcx 27-08-2014 00:29:15

No entiendo como te pones a modificar binarios y no sabes lo elemental de tipos de datos en pascal. "Text" no multiplica con numeros...

Afortunadamente tengo la solucion *.




---
*PD: Ves? Es como decir "Algo sale mal".

ecfisa 27-08-2014 01:12:18

Hola Lepuke.
Cita:

Empezado por Lepuke (Mensaje 480403)
¿ hay alguna forma de establecer el valor del byte buf en otro lado donde pueda ponerle el valor de 1024 desde una caja de texto ?

Código Delphi [-]
procedure InflateExe(const aFileName: string; const NoBytes: LongWord);
var
  buf: array of Byte;
  i: Integer;
begin
  with TFileStream.Create(aFileName, fmOpenReadWrite) do
  try
    SetLength(buf, NoBytes);
    ZeroMemory(@buf[1], Length(buf));
    Seek(0, soFromEnd);
    Write(buf[0], Length(buf));
  finally
    Free;
  end;
end;

Uso:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  InflateExe('test.exe', StrToInt(Edit1.Text));
end;

Saludos :)

JuanOrtega 27-08-2014 01:16:14

en serio ecfisa , gracias por la ayuda.

orodriguezca 27-08-2014 15:15:30

para que inflar un .exe?
 
Me pica la curiosidad: Para que "inflar" un .exe?

ecfisa 27-08-2014 22:07:29

Hola orodriguezca.

No lo ha comentado, pero supongo que deseará incrustar algo en el espacio adicionado.

Saludos :)

cloayza 28-08-2014 17:11:21

Comparto tu comentario...
Cita:

Empezado por mamcx (Mensaje 480404)
No entiendo como te pones a modificar binarios y no sabes lo elemental de tipos de datos en pascal.

Sin comentarios al código que escribió...:mad:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  buf: array of Byte;
begin
  buf:= array[0..50*edit1.Text];
end;
Te aconsejo que leas y documentes sobre lo básico antes de emprender este tipo de tareas.


La franja horaria es GMT +2. Ahora son las 04:20:52.

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