fixed some bugs with RVA -> Offset conversion (appears to be working fine for standard exes now)

This commit is contained in:
mrexodia 2016-04-22 21:04:38 +02:00
parent 941f391317
commit e089f4af41
1 changed files with 6 additions and 6 deletions

View File

@ -30,7 +30,7 @@ __declspec(dllexport) long TITCALL GetPE32SectionNumberFromVA(ULONG_PTR FileMapV
DWORD FoundInSection = -1; DWORD FoundInSection = -1;
while(SectionNumber > 0) while(SectionNumber > 0)
{ {
if(PESections->VirtualAddress <= ConvertAddress && ConvertAddress < PESections->VirtualAddress + PESections->Misc.VirtualSize) if(PESections->VirtualAddress <= ConvertAddress && ConvertAddress < PESections->VirtualAddress + max(PESections->Misc.VirtualSize, PESections->SizeOfRawData))
{ {
FoundInSection = PEHeader32->FileHeader.NumberOfSections - SectionNumber; FoundInSection = PEHeader32->FileHeader.NumberOfSections - SectionNumber;
} }
@ -54,7 +54,7 @@ __declspec(dllexport) long TITCALL GetPE32SectionNumberFromVA(ULONG_PTR FileMapV
DWORD FoundInSection = -1; DWORD FoundInSection = -1;
while(SectionNumber > 0) while(SectionNumber > 0)
{ {
if(PESections->VirtualAddress <= ConvertAddress && ConvertAddress < PESections->VirtualAddress + PESections->Misc.VirtualSize) if(PESections->VirtualAddress <= ConvertAddress && ConvertAddress < PESections->VirtualAddress + max(PESections->Misc.VirtualSize, PESections->SizeOfRawData))
{ {
FoundInSection = PEHeader64->FileHeader.NumberOfSections - SectionNumber; FoundInSection = PEHeader64->FileHeader.NumberOfSections - SectionNumber;
} }
@ -114,7 +114,7 @@ __declspec(dllexport) ULONG_PTR TITCALL ConvertVAtoFileOffset(ULONG_PTR FileMapV
{ {
while(SectionNumber > 0) while(SectionNumber > 0)
{ {
if(PESections->VirtualAddress <= ConvertAddress && ConvertAddress <= PESections->VirtualAddress + PESections->Misc.VirtualSize) if(PESections->VirtualAddress <= ConvertAddress && ConvertAddress < PESections->VirtualAddress + max(PESections->Misc.VirtualSize, PESections->SizeOfRawData))
{ {
if(ConvertAddress - PESections->VirtualAddress <= PESections->SizeOfRawData) if(ConvertAddress - PESections->VirtualAddress <= PESections->SizeOfRawData)
{ {
@ -155,7 +155,7 @@ __declspec(dllexport) ULONG_PTR TITCALL ConvertVAtoFileOffset(ULONG_PTR FileMapV
{ {
while(SectionNumber > 0) while(SectionNumber > 0)
{ {
if(PESections->VirtualAddress <= ConvertAddress && ConvertAddress <= PESections->VirtualAddress + PESections->Misc.VirtualSize) if(PESections->VirtualAddress <= ConvertAddress && ConvertAddress < PESections->VirtualAddress + max(PESections->Misc.VirtualSize, PESections->SizeOfRawData))
{ {
if(ConvertAddress - PESections->VirtualAddress <= PESections->SizeOfRawData) if(ConvertAddress - PESections->VirtualAddress <= PESections->SizeOfRawData)
{ {
@ -249,7 +249,7 @@ __declspec(dllexport) ULONG_PTR TITCALL ConvertVAtoFileOffsetEx(ULONG_PTR FileMa
{ {
while(SectionNumber > 0) while(SectionNumber > 0)
{ {
if(PESections->VirtualAddress <= ConvertAddress && ConvertAddress <= PESections->VirtualAddress + PESections->Misc.VirtualSize) if(PESections->VirtualAddress <= ConvertAddress && ConvertAddress < PESections->VirtualAddress + max(PESections->Misc.VirtualSize, PESections->SizeOfRawData))
{ {
if(ConvertAddress - PESections->VirtualAddress <= PESections->SizeOfRawData) if(ConvertAddress - PESections->VirtualAddress <= PESections->SizeOfRawData)
{ {
@ -321,7 +321,7 @@ __declspec(dllexport) ULONG_PTR TITCALL ConvertVAtoFileOffsetEx(ULONG_PTR FileMa
{ {
while(SectionNumber > 0) while(SectionNumber > 0)
{ {
if(PESections->VirtualAddress <= ConvertAddress && ConvertAddress <= PESections->VirtualAddress + PESections->Misc.VirtualSize) if(PESections->VirtualAddress <= ConvertAddress && ConvertAddress < PESections->VirtualAddress + max(PESections->Misc.VirtualSize, PESections->SizeOfRawData))
{ {
if(ConvertAddress - PESections->VirtualAddress <= PESections->SizeOfRawData) if(ConvertAddress - PESections->VirtualAddress <= PESections->SizeOfRawData)
{ {