Returns a PTEFile deserialized from the given runtime binary data.
(program_data: bytes)
| 745 | |
| 746 | |
| 747 | def deserialize_pte_binary(program_data: bytes) -> PTEFile: |
| 748 | """Returns a PTEFile deserialized from the given runtime binary data.""" |
| 749 | program_size = len(program_data) |
| 750 | segment_base_offset = 0 |
| 751 | |
| 752 | # Look for an extended header to see if segments follow the flatbuffer |
| 753 | # data. |
| 754 | eh: Optional[_ExtendedHeader] = _get_extended_header(program_data) |
| 755 | if eh and eh.is_valid(): |
| 756 | program_size = eh.program_size |
| 757 | segment_base_offset = eh.segment_base_offset |
| 758 | |
| 759 | # Parse the flatbuffer data. |
| 760 | program: Program = _json_to_program( |
| 761 | _program_flatbuffer_to_json(program_data[:program_size]) |
| 762 | ) |
| 763 | |
| 764 | if segment_base_offset != 0: |
| 765 | # Move segment data back into the Program. |
| 766 | return _restore_segments( |
| 767 | program=program, segment_data=program_data[segment_base_offset:] |
| 768 | ) |
| 769 | |
| 770 | return PTEFile(program=program, mutable_data=None, named_data=None) |
| 771 | |
| 772 | |
| 773 | def _extract_delegate_payload( |