On Wednesday 11 December 2024 17:43:40 Martin Storsjö wrote:
> On Wed, 11 Dec 2024, LIU Hao wrote:
>
> > 在 2024-12-11 21:33, Martin Storsjö 写道:
> > > >
> > > > if (gPEDta)
> > > > {
> > > > - va_rel =
> > > > gPEDta->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress;
> > > > - sz_rel =
> > > > gPEDta->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].Size;
> > > > + if (gPEDta->OptionalHeader.NumberOfRvaAndSizes >
> > > > IMAGE_DIRECTORY_ENTRY_BASERELOC)
> > > > + {
> > > > + va_rel = gPEDta-
> > > > >OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress;
> > > > + sz_rel =
> > > > gPEDta->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].Size;
> > > > + }
> > > > }
> > >
> > > For these changes, isn't the > comparison wrong? Wouldn't it be
> > > enough if we have OptionalHeader.NumberOfRvaAndSizes >=
> > > IMAGE_DIRECTORY_ENTRY_BASERELOC?
> >
> > I think this should be a normal `index < size` pattern, but written
> > backwards as `size > index`. So it's not incorrect, but weird.
>
> Thanks, you're right, sorry for the mixup.
>
> The curiosity about imports being handled only for one of PE and PE+ would
> be nice to check though.
>
> // Martin
The idea of the code is:
To access DataDirectory[0] it is required that number of directories
is more than 0. If there is zero number of directories then you cannot
dereference DataDirectory at offset zero.
I often write if-condition with variable at left side and constant on
the right side, hence in this case as:
if (gPEDta->OptionalHeader.NumberOfRvaAndSizes >
IMAGE_DIRECTORY_ENTRY_BASERELOC)
va_rel =
gPEDta->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress;
But if you prefer constant on the left side, you can rewrite condition as:
if (IMAGE_DIRECTORY_ENTRY_BASERELOC <
gPEDta->OptionalHeader.NumberOfRvaAndSizes)
va_rel =
gPEDta->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress;
Maybe the confusion comes from the fact that in most cases it is
required to access array at index defined by the variable and the array
size is constant/fixed.
But in our case we want to access array at constant offset but the array
size has variable length. So the function "input" is switched from the
usual one.
_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public