Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/google/bloaty

Bloaty: a size profiler for binaries
https://github.com/google/bloaty

Last synced: about 2 months ago
JSON representation

Bloaty: a size profiler for binaries

Awesome Lists containing this project

README

        

# Bloaty: a size profiler for binaries

[![build](https://github.com/google/bloaty/actions/workflows/build.yml/badge.svg)](https://github.com/google/bloaty/actions/workflows/build.yml)

Ever wondered what's making your binary big? Bloaty will
show you a size profile of the binary so you can understand
what's taking up space inside.

```cmdoutput
$ ./bloaty bloaty -d compileunits
FILE SIZE VM SIZE
-------------- --------------
34.8% 10.2Mi 43.4% 2.91Mi [163 Others]
17.2% 5.08Mi 4.3% 295Ki third_party/protobuf/src/google/protobuf/descriptor.cc
7.3% 2.14Mi 2.6% 179Ki third_party/protobuf/src/google/protobuf/descriptor.pb.cc
4.6% 1.36Mi 1.1% 78.4Ki third_party/protobuf/src/google/protobuf/text_format.cc
3.7% 1.10Mi 4.5% 311Ki third_party/capstone/arch/ARM/ARMDisassembler.c
1.3% 399Ki 15.9% 1.07Mi third_party/capstone/arch/M68K/M68KDisassembler.c
3.2% 980Ki 1.1% 75.3Ki third_party/protobuf/src/google/protobuf/generated_message_reflection.cc
3.2% 965Ki 0.6% 40.7Ki third_party/protobuf/src/google/protobuf/descriptor_database.cc
2.8% 854Ki 12.0% 819Ki third_party/capstone/arch/X86/X86Mapping.c
2.8% 846Ki 1.0% 66.4Ki third_party/protobuf/src/google/protobuf/extension_set.cc
2.7% 800Ki 0.6% 41.2Ki third_party/protobuf/src/google/protobuf/generated_message_util.cc
2.3% 709Ki 0.7% 50.7Ki third_party/protobuf/src/google/protobuf/wire_format.cc
2.1% 637Ki 1.7% 117Ki third_party/demumble/third_party/libcxxabi/cxa_demangle.cpp
1.8% 549Ki 1.7% 114Ki src/bloaty.cc
1.7% 503Ki 0.7% 48.1Ki third_party/protobuf/src/google/protobuf/repeated_field.cc
1.6% 469Ki 6.2% 427Ki third_party/capstone/arch/X86/X86DisassemblerDecoder.c
1.4% 434Ki 0.2% 15.9Ki third_party/protobuf/src/google/protobuf/message.cc
1.4% 422Ki 0.3% 23.4Ki third_party/re2/re2/dfa.cc
1.3% 407Ki 0.4% 24.9Ki third_party/re2/re2/regexp.cc
1.3% 407Ki 0.4% 29.9Ki third_party/protobuf/src/google/protobuf/map_field.cc
1.3% 397Ki 0.4% 24.8Ki third_party/re2/re2/re2.cc
100.0% 29.5Mi 100.0% 6.69Mi TOTAL
```

Bloaty performs a deep analysis of the binary. Using custom
ELF, DWARF, and Mach-O parsers, Bloaty aims to accurately
attribute every byte of the binary to the symbol or
compileunit that produced it. It will even disassemble the
binary looking for references to anonymous data.

Bloaty supports many features:

- **file formats:** ELF, Mach-O, PE/COFF (experimental), WebAssembly (experimental)
- **data sources:** compileunit (shown above), symbol, section, segment, etc.
- **hierarchical profiles:** combine multiple data sources into a single report
- **size diffs:** see where the binary grew, perfect for CI tests
- **separate debug files:** strip the binary under test, while making debug data available for analysis
- **flexible demangling:** demangle C++ symbols, optionally discarding function/template parameters
- **custom data sources:** regex rewrites of built-in data sources, for custom munging/bucketing
- **regex filtering:** filter out parts of the binary that do or don't match a given regex
- **easy to deploy:** statically-linked C++ binary, easy to copy around

For detailed info on all of Bloaty's features, see the [User
Documentation](doc/using.md).

For more information about the analysis performed by Bloaty,
please see [How Bloaty Works](doc/how-bloaty-works.md).

## Install

To build, use `cmake`. For example:

```
$ cmake -B build -G Ninja -S .
$ cmake --build build
$ cmake --build build --target install
```

Bloaty bundles ``libprotobuf``, ``re2``, ``capstone``, and
``pkg-config`` as Git submodules, and uses ``protoc`` build
from libprotobuf, but it will prefer the system's versions
of those dependencies if available. All other dependencies
are included as Git submodules.

If the Git repository hasn't been cloned with the
`--recursive`, the submodules can be checked out with:

```
$ git submodule update --init --recursive
```

To run the tests, see the info in
[tests/README.md](tests/README.md).

## Support

GitHub issues and PRs welcome. Please include tests when possible, see:
[tests/README.md](tests/README.md).

This is not an official Google product.