Shared library reconstruction cuts size memory and runtime costs
MergeShuffle: Reconstruct Shared Libraries for Improved Performance and Security
Software Engineering
Summary
Shared libraries in software often contain parts that are not actually used, which can waste space and slow things down. The authors introduce MergeShuffle, a tool that identifies the used parts of a shared library and rebuilds it efficiently to remove unused code. By carefully merging and rearranging the important sections, MergeShuffle reduces the library’s file size, memory use, and runtime without needing the original source code. This approach also improves security by eliminating unnecessary code that could be exploited.
What this means in practice
- •For software engineers: Shrink deployed binaries by reconstructing shared libraries to include only needed code, improving performance and security.
- •For cloud infrastructure operators: Reduce memory and storage overhead of shared libraries in cloud environments to lower operational costs and improve efficiency.
Authors
Huaifeng Zhang, Ahmed Ali-Eldin
Abstract
Debloating shared libraries has been an active research topic for years. Tools for shared library debloating rely on either static or dynamic analysis techniques to discover which parts of the shared library is used. Once these parts are found, these tools take one of two routes, either removing parts of the library that are not used, requiring reconstruction of the library; or they simply overwriting the unused functions. However, recently a broad study~\cite{brown2024broad} on debloating tools has shown that some of these tools either increase the static binary size, or are generally less effective for complex workloads. In this paper, we argue that shared-library debloaters' performance can be improved by proper reconstruction of the shared-libraries once the used functions in the library are identifies. We propose \myapp, a novel tool for reconstructing shared libraries from a given set of file ranges to eliminate unused code based on user-specified requirements, without requiring access to source code. \myapp takes as input a shared library and a set of file ranges to retain, and performs a two-phase reconstruction: merging nearby ranges to reduce loading overhead, and shuffling them to minimize file size while preserving page-aligned memory mappings. The shuffling problem is formulated as a variant of the Traveling Salesman Problem and solved using a heuristic algorithm. \myapp utilizes program headers to remap retained code to its original memory addresses, preserving user-specified functionality. Our results show that \myapp achieves up to 60\% reduction in file size, 16\% reduction in memory usage, and 32\% reduction in runtime, while maintaining user-specified functionality and improving security.