Ver Mensaje Individual
  #27  
Antiguo 03-03-2017
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Reputación: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cita:
Empezado por dec Ver Mensaje
¿Podría modificarse dicho código para que funcionase en Windows de 64 bits? Podría ser interesante, si bien no imprescindible ahora mismo. Lo pregunto ya por abusar... y no quiero hacerlo.
EL PE de ejecutables 64bits tiene algunas diferencias con el de 32bits. Sin ir muy lejos, hay dos versiones de la estructura IMAGE_NT_HEADERS que dependen a su vez de dos versiones de IMAGE_OPTIONAL_HEADER, una para 32 y otra para 64bits.

Esta modificación del código original lo capacita para funcionar compilado a 64bits:
Código Delphi [-]
function GetExeSize: cardinal;
var
  p: PBYTE;
  i, NumSections: integer;
begin
  Result := 0; // if error then result = 0
  p := pointer(GetModuleHandle(nil));      // DosHeader  'MZ'
  inc(p, PImageDosHeader(p)^._lfanew + 4); // ImageFileHeader
  NumSections := PImageFileHeader(p)^.NumberOfSections;
  inc(p, sizeof(TImageFileHeader) + PImageFileHeader(p)^.SizeOfOptionalHeader); // IMAGE_SECTION_HEADER (SectionHeaders)
  for i:= 1 to NumSections do
  begin
    with PImageSectionHeader(p)^ do
      if PointerToRawData + SizeOfRawData > Result then
        Result := PointerToRawData + SizeOfRawData;
    inc(p, sizeof(TImageSectionHeader));
  end;
end;

PD/ Una cosa más, la información de depuración puede alterar el tamaño del ejecutable con lo que es conveniente hacer las añadiduras al archivo una vez depurado el ejecutable y eliminada esta información.

Saludos.

Última edición por escafandra fecha: 03-03-2017 a las 00:55:18.
Responder Con Cita