ImHex という Hex エディタを Ubuntu 20.04 にインストールしたときのメモ書きです。
ImHex
ImHex は2020年の12月に公開された比較的新しい、午前3時にがんばる人のための Hex エディタです。 *1
- GitHub - WerWolv/ImHex: A Hex Editor for Reverse Engineers, Programmers and people that value their eye sight when working at 3 AM.
https://github.com/WerWolv/ImHex
ImHex を Ubuntu 20.04 にインストールする
公式の手順をベースに、ImHex を Ubuntu 20.04 にインストールしていきます。
なお、手元の環境では make 時に 6GB 程度のメモリを消費していたので、8GB 程度のメモリを搭載した環境で実行することを推奨します。 4GB の環境では make 時に端末がフリーズし処理が完了しませんでした。
# 必要に応じてパッケージを最新化
sudo apt update && sudo apt upgrade
# ImHex のソースを取得 git clone https://github.com/WerWolv/ImHex.git # コンパイルに必要な環境準備 cd ImHex sudo ./dist/get_deps_debian.sh mkdir build cd build # 環境によるエラー防止のための cmake ファイル修正パッチ cat <<EOL >> cmakepatch.txt 55,56c55,61 < list(REMOVE_AT PYTHON_VERSION_MAJOR_MINOR 2) < list(JOIN PYTHON_VERSION_MAJOR_MINOR "." PYTHON_VERSION_MAJOR_MINOR) --- > list(LENGTH PYTHON_VERSION_MAJOR_MINOR PYTHON_VERSION_LENGHT) > if(PYTHON_VERSION_LENGHT GREATER 2) > list(REMOVE_AT PYTHON_VERSION_MAJOR_MINOR 2) > list(JOIN PYTHON_VERSION_MAJOR_MINOR "." PYTHON_VERSION_MAJOR_MINOR) > else() > set(PYTHON_VERSION_MAJOR_MINOR \${Python_VERSION}) > endif() EOL # cmake ファイルに修正パッチを適用 patch ../cmake/build_helpers.cmake cmakepatch.txt # 公式の案内している cmake コマンドだとエラーが出るので代替コマンド CC=gcc-10 CXX=g++-10 cmake .. # ==【注意】================================================= # 8GB 以上の環境を推奨 # 試した環境ではメモリが6GB程度ないと make -j により端末がフリーズしました。 #========================================================= make -j
無事に make まで完了したら公式サイトにあるとおり ImHex の実行準備をします。
# 動作に必要なライブラリを適切な場所にコピー cp -r ../python_libs/lib ./ # パターンファイルなどを取得 git clone https://github.com/WerWolv/ImHex-Patterns.git mv ImHex-Patterns/includes ./ mv ImHex-Patterns/magic ./ mv ImHex-Patterns/patterns ./
これで起動するはずです。
./imhex
うまくいくと空っぽの ImHex が起動します。
ImHex の画面設定
メニューにある「View」から必要な画面を追加できます。
画面はドラッグ&ドロップすることで組みなおすことができます。
また、メニューの「File」にある「Load pattern...」からパターンファイルをロードすることで、ファイル形式の構造に合わせた色付き表示が可能になります。 なお、ファイルタイプに合わせた自動適用といった動かし方は見つけられませんでした。 *2
公式サイトの画像に近い感じに組み上げた例は以下の通りです。
動かしてみた感想
見た目が綺麗なのがいい感じです。 発展途上のツールということもあり、環境のせいか若干動作が不安定で普段に使うのにはまだちょっと先になりそうという印象を受けましたが、いろんな機能があるようで楽しい感じがするツールでした。
参考文献
ImHex 公式
GitHub - WerWolv/ImHex: A Hex Editor for Reverse Engineers, Programmers and people that value their eye sight when working at 3 AM.
https://github.com/WerWolv/ImHexGitHub - WerWolv/ImHex-Patterns: Hex patterns, include patterns and magic files for the use with the ImHex Hex Editor
https://github.com/WerWolv/ImHex-PatternsPattern Language Guide · WerWolv/ImHex Wiki · GitHub
https://github.com/WerWolv/ImHex/wiki/Pattern-Language-Guide
cmake 周り
CMake: リスト - Qiita
https://qiita.com/mrk_21/items/082bae48a5ef2ac1564cCMake: 条件分岐 - Qiita
https://qiita.com/mrk_21/items/49d8802dc63a2791bcc3CMake: 変数 - Qiita
https://qiita.com/mrk_21/items/68470da5d1931915cde2cmake-commands(7) — CMake 3.19.3 Documentation
https://cmake.org/cmake/help/v3.19/manual/cmake-commands.7.html
参考にしたトラブルシューティング
Problem building on Ubuntu 20.04 · Issue #8 · WerWolv/ImHex · GitHub
https://github.com/WerWolv/ImHex/issues/8Failed to build on Ubuntu 20.04 · Issue #113 · WerWolv/ImHex · GitHub
https://github.com/WerWolv/ImHex/issues/113ImHex: A Hex Editor for Reverse Engineers, Programmers and people that value their eye sight when working at 3 AM : programming
https://www.reddit.com/r/programming/comments/k6jwpq/imhex_a_hex_editor_for_reverse_engineers/
付録
concepts が見つけられないというエラーについて
github に記載の通りに cmake をした場合、make 時に <concepts>
が見つけられないとエラーが発生する場合がありました。
/home/user/ImHex/include/window.hpp:3:10: fatal error: concepts: No such file or directory 3 | #include <concepts> | ^~~~~~~~~~ compilation terminated.
以下のコマンドで cmake してあげるとこれを回避できるようです。
CC=gcc-10 CXX=g++-10 cmake ..
上記コマンドでもうまくいかない場合は cmake を実行しているディレクトリにある残骸ファイルを削除してから実行してみるとうまくいくかもしれません。
「CMake Error at cmake/build_helpers.cmake:55」について
cmake 時に以下のようなエラーが表示される場合があります。
CMake Error at cmake/build_helpers.cmake:55 (list): list index: 2 out of range (-2, 1) Call Stack (most recent call first): CMakeLists.txt:22 (findLibraries) -- Configuring incomplete, errors occurred! See also "/home/user/ImHex/build/CMakeFiles/CMakeOutput.log".
示されている cmake ファイルの55行目付近を確認すると以下の通り Python のバージョンを処理している部分のようでした。
find_package(Python COMPONENTS Development REQUIRED) if(Python_VERSION LESS 3) message(STATUS ${PYTHON_VERSION_MAJOR_MINOR}) message(FATAL_ERROR "No valid version of Python 3 was found.") endif() string(REPLACE "." ";" PYTHON_VERSION_MAJOR_MINOR ${Python_VERSION}) list(REMOVE_AT PYTHON_VERSION_MAJOR_MINOR 2) # 55行目 list(JOIN PYTHON_VERSION_MAJOR_MINOR "." PYTHON_VERSION_MAJOR_MINOR) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_FLAGS} -DPYTHON_VERSION_MAJOR_MINOR=\"\\\"${PYTHON_VERSION_MAJOR_MINOR}\"\\\"")
パッと読めるほど詳しくないので「message(STATUS ${変数})」を使って printf デバッグをしていくと、処理の書かれ方が python のバージョン表記として 3.8.5 など3桁目の patch 部まであることを想定しているのに対して、実際には 3.8 など2桁目の minor 部までしか返されていないため、55行目の patch 部を決め打ちで取得する処理で配列の範囲外を参照してしまいエラーが発生しているようだと分かりました。 *3
その後の処理を追うと、結局は patch 部がある場合にそれを除外して minor 部までの書式に変更することが目的の処理のようなので、最初から patch 部がなければ特に処理しなくてもよさそうに見えます。
ということで、バージョンに patch 部が含まれている場合のみ当該処理がされるよう修正しました。
55,56c55,61 < list(REMOVE_AT PYTHON_VERSION_MAJOR_MINOR 2) < list(JOIN PYTHON_VERSION_MAJOR_MINOR "." PYTHON_VERSION_MAJOR_MINOR) --- > list(LENGTH PYTHON_VERSION_MAJOR_MINOR PYTHON_VERSION_LENGHT) > if(PYTHON_VERSION_LENGHT GREATER 2) > list(REMOVE_AT PYTHON_VERSION_MAJOR_MINOR 2) > list(JOIN PYTHON_VERSION_MAJOR_MINOR "." PYTHON_VERSION_MAJOR_MINOR) > else() > set(PYTHON_VERSION_MAJOR_MINOR ${Python_VERSION}) > endif()
上記修正の結果、エラーが出ることなく cmake が完了するようになりました。 *4
更新履歴
- 2021/01/25 新規作成