Skip to content

ARM64 PE Relocation Support #6208

Open
Open
@ehntoo

Description

@ehntoo

What is the feature you'd like to have?
The Arm64PeRelocationHandler is currently a stub that only throws a warning about an unsupported relocation type. Between the use of PE in EFI and the increasing popularity of Windows on ARM, it would be nice for PE relocations to be supported on ARM64.

Is your feature request related to a problem?
While analyzing an arm64 EFI binary, a number of important pointers and jump tables were replaced with null pointers.

Are any alternative solutions acceptable?
The IMAGE_REL_BASED_HIGH, IMAGE_REL_BASED_LOW, IMAGE_REL_BASED_HIGHLOW, IMAGE_REL_BASED_HIGHADJ, and IMAGE_REL_BASED_DIR64 relocations do not appear to be architecture-dependent. These could potentially be handled locally in the PE View rather than in individual architectures.

Additional Information:
Attached is a zipfile containing an EFI PE from the bootloader of the AP2A.240805.005.S4 build of Pixel 5a firmware that uses IMAGE_REL_BASED_DIR64 relocations. When loaded at the default base address of 0, a 19-entry jump table at 0x475d0 is currently replaced by all null pointers.
pixel5a_efi_pe.zip

Relevant .reloc directory entries:
relocations

The current view of the jump table:
squashed jump table

The raw file contents for the jump table:
raw jump table

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions