Cita:
Empezado por dec
¿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; p := pointer(GetModuleHandle(nil)); inc(p, PImageDosHeader(p)^._lfanew + 4); NumSections := PImageFileHeader(p)^.NumberOfSections;
inc(p, sizeof(TImageFileHeader) + PImageFileHeader(p)^.SizeOfOptionalHeader); 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.