Skip to content

Commit

Permalink
Add PowerPC Big Endian 0x1F2 (found on Xbox 360) (#1090)
Browse files Browse the repository at this point in the history
  • Loading branch information
Aiden-Isik committed Aug 31, 2024
1 parent 2001d8c commit 93e2e65
Show file tree
Hide file tree
Showing 8 changed files with 13 additions and 2 deletions.
1 change: 1 addition & 0 deletions api/c/include/LIEF/PE/Header.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ enum LIEF_PE_MACHINE_TYPES {
LIEF_PE_MACHINE_MIPSFPU16 = 0x466, /**< MIPS16 with FPU */
LIEF_PE_MACHINE_POWERPC = 0x1F0, /**< Power PC little endian */
LIEF_PE_MACHINE_POWERPCFP = 0x1F1, /**< Power PC with floating point */
LIEF_PE_MACHINE_POWERPCBE = 0x1F2, /**< Power PC big endian */
LIEF_PE_MACHINE_R4000 = 0x166, /**< MIPS with little endian */
LIEF_PE_MACHINE_RISCV32 = 0x5032, /**< RISC-V 32-bit address space */
LIEF_PE_MACHINE_RISCV64 = 0x5064, /**< RISC-V 64-bit address space */
Expand Down
1 change: 1 addition & 0 deletions api/python/lief/PE.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -1172,6 +1172,7 @@ class Header(lief.Object):
MIPSFPU16: ClassVar[Header.MACHINE_TYPES] = ...
POWERPC: ClassVar[Header.MACHINE_TYPES] = ...
POWERPCFP: ClassVar[Header.MACHINE_TYPES] = ...
POWERPCBE: ClassVar[Header.MACHINE_TYPES] = ...
R4000: ClassVar[Header.MACHINE_TYPES] = ...
SH3: ClassVar[Header.MACHINE_TYPES] = ...
SH3DSP: ClassVar[Header.MACHINE_TYPES] = ...
Expand Down
1 change: 1 addition & 0 deletions api/python/src/PE/objects/pyHeader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ void create<Header>(nb::module_& m) {
.value(PY_ENUM(Header::MACHINE_TYPES::MIPSFPU16))
.value(PY_ENUM(Header::MACHINE_TYPES::POWERPC))
.value(PY_ENUM(Header::MACHINE_TYPES::POWERPCFP))
.value(PY_ENUM(Header::MACHINE_TYPES::POWERPCBE))
.value(PY_ENUM(Header::MACHINE_TYPES::R4000))
.value(PY_ENUM(Header::MACHINE_TYPES::SH3))
.value(PY_ENUM(Header::MACHINE_TYPES::SH3DSP))
Expand Down
4 changes: 4 additions & 0 deletions api/rust/cargo/lief/src/pe/headers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,8 @@ pub enum MachineType {
POWERPC,
/// Power PC with floating point
POWERPCFP,
/// Power PC big endian
POWERPCBE,
/// MIPS with little endian
R4000,
/// RISC-V 32-bit address space
Expand Down Expand Up @@ -227,6 +229,7 @@ impl From<u32> for MachineType {
0x00000466 => MachineType::MIPSFPU16,
0x000001f0 => MachineType::POWERPC,
0x000001f1 => MachineType::POWERPCFP,
0x000001f2 => MachineType::POWERPCBE,
0x00000166 => MachineType::R4000,
0x00005032 => MachineType::RISCV32,
0x00005064 => MachineType::RISCV64,
Expand Down Expand Up @@ -259,6 +262,7 @@ impl From<MachineType> for u32 {
MachineType::MIPSFPU16 => 0x00000466,
MachineType::POWERPC => 0x000001f0,
MachineType::POWERPCFP => 0x000001f1,
MachineType::POWERPCBE => 0x000001f2,
MachineType::R4000 => 0x00000166,
MachineType::RISCV32 => 0x00005032,
MachineType::RISCV64 => 0x00005064,
Expand Down
1 change: 1 addition & 0 deletions include/LIEF/PE/Header.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ class LIEF_API Header : public Object {
MIPSFPU16 = 0x466, /**< MIPS16 with FPU */
POWERPC = 0x1F0, /**< Power PC little endian */
POWERPCFP = 0x1F1, /**< Power PC with floating point */
POWERPCBE = 0x1F2, /**< Power PC big endian */
R4000 = 0x166, /**< MIPS with little endian */
RISCV32 = 0x5032, /**< RISC-V 32-bit address space */
RISCV64 = 0x5064, /**< RISC-V 64-bit address space */
Expand Down
1 change: 1 addition & 0 deletions include/LIEF/PE/undef.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
#undef IMAGE_FILE_MACHINE_MIPSFPU16
#undef IMAGE_FILE_MACHINE_POWERPC
#undef IMAGE_FILE_MACHINE_POWERPCFP
#undef IMAGE_FILE_MACHINE_POWERPCBE
#undef IMAGE_FILE_MACHINE_R4000
#undef IMAGE_FILE_MACHINE_RISCV32
#undef IMAGE_FILE_MACHINE_RISCV64
Expand Down
3 changes: 2 additions & 1 deletion src/PE/Binary.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1175,7 +1175,7 @@ LIEF::Header Binary::get_abstract_header() const {
{Header::MACHINE_TYPES::THUMB, {ARCH_ARM, {MODE_32, MODE_THUMB}}},
};

CONST_MAP(Header::MACHINE_TYPES, ENDIANNESS, 25) arch_pe_to_endi_lief {
CONST_MAP(Header::MACHINE_TYPES, ENDIANNESS, 26) arch_pe_to_endi_lief {
{Header::MACHINE_TYPES::UNKNOWN, ENDIANNESS::ENDIAN_NONE},
{Header::MACHINE_TYPES::AM33, ENDIANNESS::ENDIAN_NONE},
{Header::MACHINE_TYPES::AMD64, ENDIANNESS::ENDIAN_LITTLE},
Expand All @@ -1191,6 +1191,7 @@ LIEF::Header Binary::get_abstract_header() const {
{Header::MACHINE_TYPES::MIPSFPU16, ENDIANNESS::ENDIAN_BIG},
{Header::MACHINE_TYPES::POWERPC, ENDIANNESS::ENDIAN_LITTLE},
{Header::MACHINE_TYPES::POWERPCFP, ENDIANNESS::ENDIAN_LITTLE},
{Header::MACHINE_TYPES::POWERPCBE, ENDIANNESS::ENDIAN_BIG},
{Header::MACHINE_TYPES::R4000, ENDIANNESS::ENDIAN_LITTLE},
{Header::MACHINE_TYPES::RISCV32, ENDIANNESS::ENDIAN_LITTLE},
{Header::MACHINE_TYPES::RISCV64, ENDIANNESS::ENDIAN_LITTLE},
Expand Down
3 changes: 2 additions & 1 deletion src/PE/Header.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ std::ostream& operator<<(std::ostream& os, const Header& entry) {
}

const char* to_string(Header::MACHINE_TYPES e) {
CONST_MAP(Header::MACHINE_TYPES, const char*, 25) enumStrings {
CONST_MAP(Header::MACHINE_TYPES, const char*, 26) enumStrings {
{ Header::MACHINE_TYPES::UNKNOWN, "UNKNOWN" },
{ Header::MACHINE_TYPES::AM33, "AM33" },
{ Header::MACHINE_TYPES::AMD64, "AMD64" },
Expand All @@ -127,6 +127,7 @@ const char* to_string(Header::MACHINE_TYPES e) {
{ Header::MACHINE_TYPES::MIPSFPU16, "MIPSFPU16" },
{ Header::MACHINE_TYPES::POWERPC, "POWERPC" },
{ Header::MACHINE_TYPES::POWERPCFP, "POWERPCFP" },
{ Header::MACHINE_TYPES::POWERPCBE, "POWERPCBE" },
{ Header::MACHINE_TYPES::R4000, "R4000" },
{ Header::MACHINE_TYPES::RISCV32, "RISCV32" },
{ Header::MACHINE_TYPES::RISCV64, "RISCV64" },
Expand Down

0 comments on commit 93e2e65

Please sign in to comment.