mirror of
https://github.com/topjohnwu/Magisk.git
synced 2026-09-21 21:55:28 -04:00
Support dynamic zImage piggy payload sizes during repacking by updating the zImage decompressor stub headers, symbol tables, and GOT entries. Previously, magiskboot padded repacked zImage files to preserve the exact original file size. For non-gzip compressed zImages (such as XZ), repacking with a different payload size broke stub symbol resolution and resulted in ununpackable or unbootable images. Key changes: - Encapsulate zImage parsing and patching in a dedicated struct ZImage in Rust with CXX FFI, new_head, and new_tail methods. - Locate piggy_end using table references or GOT table entries bounded by LC0. - Relocate LC0 table entries, LC1 table, and GOT table entries with 4-byte padding/alignment when payload size changes. - Relocate R_ARM_GOTPC PC-relative literal pools in decompressor .text. - Append uncompressed size for non-gzip algorithms per size_append. - Remove zopfli compression support across magiskboot as dynamic zImage piggy sizing supersedes the need for exact size matching. Fix #9880 Assisted-by: Gemini 3.7 Flash
Magisk Documentation
The following sections are for developers
- Building and Developing Magisk (for developing Magisk itself)
- Developer Guides (for developers using Magisk)
- Magisk Tools
- Internal Details
- Android Booting Shenanigans