diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/hle/service/ldr/ldr.cpp | 39 |
1 files changed, 13 insertions, 26 deletions
diff --git a/src/core/hle/service/ldr/ldr.cpp b/src/core/hle/service/ldr/ldr.cpp index 6daea3408..ca53a9923 100644 --- a/src/core/hle/service/ldr/ldr.cpp +++ b/src/core/hle/service/ldr/ldr.cpp | |||
| @@ -615,36 +615,23 @@ private: | |||
| 615 | } | 615 | } |
| 616 | 616 | ||
| 617 | static bool IsValidNRO(const NROHeader& header, u64 nro_size, u64 bss_size) { | 617 | static bool IsValidNRO(const NROHeader& header, u64 nro_size, u64 bss_size) { |
| 618 | return header.magic == Common::MakeMagic('N', 'R', 'O', '0') && | ||
| 619 | header.nro_size == nro_size && header.bss_size == bss_size && | ||
| 618 | 620 | ||
| 619 | const bool valid_magic = header.magic == Common::MakeMagic('N', 'R', 'O', '0'); | 621 | header.segment_headers[RO_INDEX].memory_offset == |
| 622 | header.segment_headers[TEXT_INDEX].memory_offset + | ||
| 623 | header.segment_headers[TEXT_INDEX].memory_size && | ||
| 620 | 624 | ||
| 621 | const bool valid_nro_size = header.nro_size == nro_size; | 625 | header.segment_headers[DATA_INDEX].memory_offset == |
| 626 | header.segment_headers[RO_INDEX].memory_offset + | ||
| 627 | header.segment_headers[RO_INDEX].memory_size && | ||
| 622 | 628 | ||
| 623 | const bool valid_bss_size = header.bss_size == bss_size; | 629 | nro_size == header.segment_headers[DATA_INDEX].memory_offset + |
| 630 | header.segment_headers[DATA_INDEX].memory_size && | ||
| 624 | 631 | ||
| 625 | const bool valid_ro_offset = header.segment_headers[RO_INDEX].memory_offset == | 632 | Common::Is4KBAligned(header.segment_headers[TEXT_INDEX].memory_size) && |
| 626 | header.segment_headers[TEXT_INDEX].memory_offset + | 633 | Common::Is4KBAligned(header.segment_headers[RO_INDEX].memory_size) && |
| 627 | header.segment_headers[TEXT_INDEX].memory_size; | 634 | Common::Is4KBAligned(header.segment_headers[DATA_INDEX].memory_size); |
| 628 | |||
| 629 | const bool valid_data_offset = header.segment_headers[DATA_INDEX].memory_offset == | ||
| 630 | header.segment_headers[RO_INDEX].memory_offset + | ||
| 631 | header.segment_headers[RO_INDEX].memory_size; | ||
| 632 | |||
| 633 | const bool valid_nro_calculated_size = | ||
| 634 | nro_size == header.segment_headers[DATA_INDEX].memory_offset + | ||
| 635 | header.segment_headers[DATA_INDEX].memory_size; | ||
| 636 | |||
| 637 | const bool text_aligned = | ||
| 638 | Common::Is4KBAligned(header.segment_headers[TEXT_INDEX].memory_size); | ||
| 639 | |||
| 640 | const bool ro_aligned = Common::Is4KBAligned(header.segment_headers[RO_INDEX].memory_size); | ||
| 641 | |||
| 642 | const bool data_aligned = | ||
| 643 | Common::Is4KBAligned(header.segment_headers[DATA_INDEX].memory_size); | ||
| 644 | |||
| 645 | return valid_magic && valid_nro_size && valid_bss_size && valid_ro_offset && | ||
| 646 | valid_data_offset && valid_nro_calculated_size && text_aligned && ro_aligned && | ||
| 647 | data_aligned; | ||
| 648 | } | 635 | } |
| 649 | Core::System& system; | 636 | Core::System& system; |
| 650 | }; | 637 | }; |