All pastes #548111 Raw Edit

Something

public text v1 · immutable
·published 2007-06-07 16:49 UTC
rendered paste body
int NewImageSize(unsigned char *Image)
{
	DWORD Alignment=0;
	DWORD SectionLoop=0;
	int Result=0;
	TSections **PSections;
	PIMAGE_NT_HEADERS ImageNtHeaders;
	PIMAGE_DOS_HEADER ImageDosHeader;
	ImageDosHeader = (PIMAGE_DOS_HEADER)Image;
	ImageNtHeaders = (PIMAGE_NT_HEADERS)((DWORD)(Image) + (DWORD)(ImageDosHeader->e_lfanew));
	Alignment = ImageNtHeaders->OptionalHeader.SectionAlignment;
	if((ImageNtHeaders->OptionalHeader.SizeOfHeaders % Alignment ==0))
		Result = ImageNtHeaders->OptionalHeader.SizeOfHeaders;
	else
		Result = ((ImageNtHeaders->OptionalHeader.SizeOfHeaders / Alignment)+1)*Alignment;
	PSections=(TSections **)((unsigned char *)(&ImageNtHeaders->OptionalHeader)+ImageNtHeaders->FileHeader.SizeOfOptionalHeader);
	for(SectionLoop=0; SectionLoop < (DWORD)(ImageNtHeaders->FileHeader.NumberOfSections-1); SectionLoop++){
		if((PSections[SectionLoop]->Misc.VirtualSize) < 0 || (PSections[SectionLoop]->Misc.VirtualSize) > 0){
			if(PSections[SectionLoop]->Misc.VirtualSize % Alignment ==0)
				Result = Result + PSections[SectionLoop]->Misc.VirtualSize ;
			else
				Result = Result+(((PSections[SectionLoop]->Misc.VirtualSize / Alignment)+1)*Alignment);
		}
	}
	return Result;
}