Open-source project
horsicq/XELFViewer avatar
horsicq/XELFViewer

XELFViewer: ELF inspection and editing across desktop platforms

ELF file viewer/editor for Windows, Linux and MacOS.

1,587 stars133 forksC++MIT

At a glance

What is it?
XELFViewer is a graphical ELF viewer and editor for Windows, Linux, and macOS. The README documents downloads and points to separate build and GUI guides, but it does not enumerate supported edits, validation, or rollback behavior.
Who is it for?
Developers and reverse engineers who prefer a graphical workflow for inspecting ELF files may find XELFViewer relevant, while users seeking command-line automation or a narrowly documented editor should first confirm that their required ELF operations are supported. Before adopting it, check doc/RUN.md for the exact editing workflow, BUILD.md for the platform toolchain, and the absence of documented rollback or validation behavior.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository received new commits within the last day.
What is it written in?
Mainly C++, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

Why XELFViewer targets desktop ELF inspection

XELFViewer addresses the need to inspect and edit ELF files through a graphical application rather than treating them only as undifferentiated byte sequences. The README identifies it as an "ELF file viewer/editor" and states that it supports Windows, Linux, and macOS. That makes it most relevant to developers, reverse engineers, and other users who need to examine ELF binaries produced for Unix-like environments while working on a supported desktop system.

The distinction between viewer and editor matters. A viewer supports examination, while an editor implies that at least some file contents can be changed. The README does not enumerate which structures or fields may be modified, whether offsets and sizes are recalculated, or what validation occurs after a change. It also does not claim that XELFViewer can repair malformed ELF files. Its documented scope should therefore be understood as presentation and editing of ELF files, with the exact supported operations left to doc/RUN.md and the application itself.

XELFViewer is not presented as a general-purpose project analysis suite, even though several top-level directories have analysis-related names. The repository includes components such as XDisasmView, XEntropyWidget, XRegionsWidget, XYara, and XStaticUnpacker. Based on the repository layout, XELFViewer sits within a broader desktop binary-analysis codebase, but the README does not document how every component is exposed in the GUI. A prospective user should verify the visible feature set rather than infer a complete workflow from directory names alone.

How the XELFViewer repository organizes ELF and binary-analysis code

The repository is primarily a C++ desktop codebase with CMake and qmake build entry points. The top-level CMakeLists.txt indicates CMake support, while build.pri provides a qmake-oriented project file. Platform-specific code is also visible: LINUX/ appears in the repository tree, build_msvc_win32.bat targets a Windows build environment, and build_mac.sh provides a macOS build script. These files indicate that the project accounts for several desktop toolchains, although the README does not reproduce their requirements.

The most relevant components appear in directories such as Formats, FormatDialogs, FormatWidgets, XFileInfo, XHexView, XHexEdit, XDisasmCore, and XDisasmView. Their names point toward file-format presentation, format-specific dialogs and widgets, file information, hexadecimal viewing and editing, and disassembly support. This structure is materially different from a generic byte editor because ELF-specific format code has a dedicated place in the project. The repository also includes XVisualizationWidget, XEntropyWidget, XMemoryMapWidget, and XSymbolsWidget, but the README does not explain which views are shown for every file or which are configurable.

Other modules show that XELFViewer is integrated with a wider binary-analysis foundation. XExtractor, XStaticUnpacker, XScanEngine, XDecompiler, XDemangle, XCppfilt, XHashWidget, XYara, and XArchive each have a separate top-level component. Detect-It-Easy and XCapstone appear as entries as well. These names suggest reusable parsing and analysis components, but they are not proof that all formats or backends are supported in the current XELFViewer release. The safer conclusion is that ELF viewing is one part of a larger Qt-oriented desktop codebase.

Installing XELFViewer from releases or the repository

The simplest documented installation route is the GitHub releases page. The README links directly to that page and lists Beta, 0.05, and 0.04 as recent releases. Beta was published on 2022-10-20, 0.05 on 2022-05-22, and 0.04 on 2022-01-14. No checksums, package names, architecture-specific builds, or installation commands appear in the README, so a user must inspect the release assets rather than assume a universal package format.

For contributors or users building the source tree, the README points to doc/BUILD.md. It does not reproduce compiler versions, Qt configuration, submodules, or platform prerequisites in the main README. The Dockerfile supplies a Linux build recipe and makes its use explicit. It starts from ubuntu:bionic, installs Qt 5 development packages and build tools, clones XELFViewer with submodules, then runs the repository scripts:

dockerfile
ARG image=ubuntu:bionic

FROM ${image} as source-internet

FROM source-internet as builder

The build stage installs dependencies and invokes the repository's build scripts:

dockerfile
RUN apt-get update --quiet
RUN apt-get install --quiet --assume-yes \
      git  \
      build-essential \
      qt5-default \
      qtbase5-dev \
      qtscript5-dev \
      qttools5-dev-tools

The remaining Dockerfile steps clone the repository recursively and execute its build and installation scripts:

dockerfile
RUN git clone --recursive https://github.com/horsicq/XELFViewer.git

RUN cd XELFViewer &&  bash -x build_dpkg.sh && bash -x install.sh

This is a build recipe, not a documented one-line desktop installation. The Dockerfile does not provide the Docker build invocation, explain where the resulting executable is placed, or describe how the application starts afterward.

Opening and inspecting an ELF file in the XELFViewer GUI

The README identifies the executable as `xelfviewer` and says that usage instructions for its GUI are in doc/RUN.md. The README does not include those instructions, so it does not support an exact menu sequence, file-opening command, or dialog name. Consequently, the first concrete use begins by obtaining a release or building the project, starting `xelfviewer`, and consulting doc/RUN.md for the documented opening workflow.

The screenshot files in the repository are named `1.png` through `5.png`, plus `xelfviewer.png`, but no image descriptions are provided. They cannot establish which panes are mandatory, whether editing is modal, or whether multiple files can be open at once. Nor does the README identify a command-line syntax, project session format, export command, or headless inspection mode. This is a meaningful limitation for automation pipelines. XELFViewer should not be described as a scriptable ELF parsing library based on the README.

For an initial evaluation, the relevant questions are practical and should be answered against the matching platform guide. Does `xelfviewer` open ELF32 and ELF64 files through a file picker? Which header and section information does the initial window display? Which edits are permitted? Does the program detect inconsistent offsets or sizes after an edit? The repository topics include `elf64` and `linux-system-programming`, but topic tags do not provide enough evidence to answer these questions. doc/RUN.md is the real source for the GUI workflow, and the release itself is the proper place to verify visible controls.

Editing risks and unsupported recovery behavior in XELFViewer

ELF is a structured executable format, so an editor that changes headers, sections, or related values can create invalid output if it does not maintain internal consistency. XELFViewer's README confirms an editing role, but it does not document checksums, backups, atomic writes, undo, validation passes, or rollback. Those omissions should matter to anyone considering the project for modifying production binaries.

The absence of documentation is not proof that a safety mechanism is absent. The application may contain validation logic or file-backup behavior that is described in doc/RUN.md or exposed only in the interface. Conversely, the README gives no basis for promising any such feature. Before modifying an important ELF file, preserve the original separately and verify the edited output with the workflows already used for that target platform. This article does not invent a project-specific backup command because none appears in the README or Dockerfile.

Another limitation is format focus. XELFViewer targets ELF, so it is the wrong tool for a workflow based entirely on PE, Mach-O, or raw non-ELF files. The repository contains modules with names associated with other binary formats, but that does not establish that the released `xelfviewer` application can edit every format represented in the broader source tree. Users should verify actual file acceptance and supported edit operations rather than treating the project as a universal executable-format editor.

XELFViewer versus a raw hexadecimal editing workflow

A raw hexadecimal editor is the clearest practical alternative. That approach operates directly on byte offsets and can be used for any data whose byte-level layout is already known. It does not require an ELF-aware interface, which can be useful for preserving unrelated bytes or applying a narrowly understood patch. However, the operator remains responsible for interpreting field widths, offsets, endian order, alignment, section tables, and values that depend on changed sizes.

XELFViewer takes a different approach. It is specifically identified as an ELF viewer and editor, and the repository includes separate `Formats`, `FormatDialogs`, and `FormatWidgets` components alongside `XHexView` and `XHexEdit`. Based on that layout, the project is designed to present and manipulate ELF structures through format-aware code rather than leaving every operation at the byte level. That can reduce the need to calculate offsets manually, although the README does not quantify the benefit or guarantee that all structural changes are managed automatically.

The choice depends on the operation. Use a raw hexadecimal workflow when the required change is a fixed, fully understood byte patch and preserving every other byte is the primary constraint. Evaluate XELFViewer when navigating ELF-specific structures matters more. Before choosing it for automation, confirm whether the required operation can be performed through its GUI and whether the result is validated by a separate ELF-aware tool.

Maintenance, releases, and the MIT licensing implication

The repository is not archived, and its last push was on 2026-10-16. That is recent enough not to classify the repository as stale under the available maintenance facts. Release activity tells a different story: the newest listed release is Beta from 2022-10-20, followed by 0.05 from 2022-05-22 and 0.04 from 2022-01-14. A recent source push does not by itself establish that a new packaged GUI release or platform-specific installer is available.

The changelog is located in `changelog.txt`, and the README directs users there for release and development history. Upgrading therefore requires comparing the currently installed build with that file and checking the releases page for a usable artifact. The README does not document migration between versions, rollback, database upgrades, or compatibility guarantees for existing edited files.

XELFViewer is distributed under the MIT License through the repository's `LICENSE` file. That permits use, modification, distribution, and sublicensing subject to the License's notice and disclaimer conditions. This is a statement about the declared project terms, not legal advice. Teams embedding the application in an internal workflow should review the actual `LICENSE` text and preserve its required notice.

Editorial conclusion

Developers and reverse engineers who prefer a graphical workflow for inspecting ELF files may find XELFViewer relevant, while users seeking command-line automation or a narrowly documented editor should first confirm that their required ELF operations are supported. Before adopting it, check doc/RUN.md for the exact editing workflow, BUILD.md for the platform toolchain, and the absence of documented rollback or validation behavior. Its repository received a push on 2026-10-16, but its most recent listed release remains Beta from 2022-10-20.

Frequently asked questions

Which operating systems does XELFViewer support?

The README identifies Windows, Linux, and macOS as supported systems. Platform-specific build files are also present for Windows, Linux, and macOS.

How do I install XELFViewer?

The README directs users to the GitHub releases page for downloadable builds. For source builds, it points to `doc/BUILD.md`; the repository also contains a `Dockerfile` with an Ubuntu and Qt 5 build recipe.

Does XELFViewer provide a documented command-line interface?

The README names the GUI executable as `xelfviewer` and refers readers to `doc/RUN.md`, but it does not document command-line options or a headless workflow.

What ELF fields can XELFViewer edit?

The README confirms that XELFViewer is a viewer and editor, but it does not enumerate supported fields, recalculation rules, validation, backup, or rollback behavior. `doc/RUN.md` is the documented source for GUI usage details.

Official sources

  1. horsicq/XELFViewer on GitHub
  2. License: MIT
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/horsicq-xelfviewer.svg)](https://hysenlabs.com/projects/horsicq-xelfviewer)

Was this useful?