mirror of
https://github.com/ipxe/ipxe
synced 2025-12-18 18:40:24 +03:00
[build] Allow genfsimg to be used on third party UEFI binaries
Extract the PE header offset from the MZ header rather than assuming a fixed offset as used in the binaries created by the iPXE build system. This allows genfsimg to be used to create bootable filesystem images from third party UEFI binaries such as the UEFI shell. Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
@@ -16,6 +16,18 @@ help() {
|
||||
echo " -p PAD pad filesystem (in kB)"
|
||||
}
|
||||
|
||||
# Get hex byte from binary file
|
||||
#
|
||||
get_byte() {
|
||||
local FILENAME
|
||||
local OFFSET
|
||||
|
||||
FILENAME="${1}"
|
||||
OFFSET="${2}"
|
||||
|
||||
od -j "${OFFSET}" -N 1 -A n -t x1 -- "${FILENAME}" | tr -d " "
|
||||
}
|
||||
|
||||
# Get hex word from binary file
|
||||
#
|
||||
get_word() {
|
||||
@@ -37,12 +49,18 @@ efi_boot_name() {
|
||||
|
||||
FILENAME="${1}"
|
||||
|
||||
PESIG=$(get_word "${FILENAME}" 192)
|
||||
if [ "${PESIG}" != "5045" ] ; then
|
||||
echo "${FILENAME}: not an EFI executable" >&2
|
||||
MZSIG=$(get_word "${FILENAME}" 0)
|
||||
if [ "${MZSIG}" != "4d5a" ] ; then
|
||||
echo "${FILENAME}: invalid MZ header" >&2
|
||||
exit 1
|
||||
fi
|
||||
ARCH=$(get_word "${FILENAME}" 196)
|
||||
PEOFF=$(get_byte "${FILENAME}" 0x3c)
|
||||
PESIG=$(get_word "${FILENAME}" "0x${PEOFF}")
|
||||
if [ "${PESIG}" != "5045" ] ; then
|
||||
echo "${FILENAME}: invalid PE header" >&2
|
||||
exit 1
|
||||
fi
|
||||
ARCH=$(get_word "${FILENAME}" $(( "0x${PEOFF}" + 4 )) )
|
||||
case "${ARCH}" in
|
||||
"4c01" )
|
||||
echo "BOOTIA32.EFI"
|
||||
|
||||
Reference in New Issue
Block a user