6140104fb2
the start of the section headers has to take into account the fact that the image_nt_header is really variable sized. It happens that the existing calculation is correct for _most_ production binaries produced by the Windows DDK, but if we get a binary with oddball offsets, the PE loader could crash. Changes from the supplied patch are: - We don't really need to use the IMAGE_SIZEOF_NT_HEADER() macro when computing how much of the header to return to callers of pe_get_optional_header(). While it's important to take the variable size of the header into account in other calculations, we never actually look at anything outside the non-variable portion of the header. This saves callers from having to allocate a variable sized buffer off the heap (I purposely tried to avoid using malloc() in subr_pe.c to make it easier to compile in both the -D_KERNEL and !-D_KERNEL case), and since we're copying into a buffer on the stack, we always have to copy the same amount of data or else we'll trash the stack something fierce. - We need <stddef.h> to get offsetof() in the !-D_KERNEL case. - ndiscvt.c needs the IMAGE_FIRST_SECTION() macro too, since it does a little bit of section pre-processing. PR: kern/83477 |
||
---|---|---|
.. | ||
cfg_var.h | ||
hal_var.h | ||
kern_ndis.c | ||
kern_windrv.c | ||
ndis_var.h | ||
ntoskrnl_var.h | ||
pe_var.h | ||
resource_var.h | ||
subr_hal.c | ||
subr_ndis.c | ||
subr_ntoskrnl.c | ||
subr_pe.c | ||
subr_usbd.c | ||
usbd_var.h | ||
winx32_wrap.S | ||
winx64_wrap.S |