大家好,我是明说网络的小明同学。
ImHex火了有一阵子了,像这样
狂揽2500星,开源十六进制编辑器登顶GitHub热榜ImHex是什么?
那么这么火他到底是个什么呢?
ImHex是一款功能强大的十六进制编辑器,该工具专为逆向工程分析师、编程开发人员以及那些想好好保护自己眼睛的安全人员所设计。哪怕你每天工作到凌晨三点(虽然不建议),也不会伤害你的眼睛!
为什么这么火呢?
首先一定是颜值
上截图
其次,一定是开源特性
ImHex是一款开源的十六进制编辑器。开源地址为
https://github.com/WerWolv/ImHex使用C++20编写,内部使用插件式管理方法加载窗体,其扩展性非常的强,开发上手也很快。
相比之下,一些编辑器如010Edit,作为闭源产品收费较贵,显然ImHex让开源社区眼前一亮,都有一种“我也能开发编辑器的感觉”,而且事实上也确实是这样
下面就让我们来试试这款 raising star
编译ImHex
首先系统选择Ubuntu20.04
不要问问为什么不是ubuntu18,16,问了就是不符合编译要求,要么是这些系统上编译工具版本低,缺少一些新的特性,要么就是依赖安装不上
安装依赖
在项目根目录下的dict目录你可以找到对应平台如何安装依赖。以下是ubuntu系统需要安装的依赖
apt install -y \
build-essential \
gcc-10 \
g++-10 \
lld \
${PKGCONF:-} \
cmake \
make \
ccache \
libglfw3-dev \
libglm-dev \
libmagic-dev \
libmbedtls-dev \
python3-dev \
libfreetype-dev \
libgtk-3-dev \
echo "Please consider this before running cmake (useful on e.g. Ubuntu 20.04):"
echo "export CXX=g++-10"
需要注意的是,该项目使用了很多C++20的特性,如concept、span等,因此在编译之前,确保使用了支持最新C++20的编译器:
在cmake运行前要,export CXX=g++-10,否则汇报有些头文件找不到的错误,例如span头文件
macos:
CC=$(brew --prefix llvm)/bin/clang
CXX=$(brew --prefix llvm)/bin/clang++
PKG_CONFIG_PATH="$(brew --prefix openssl)/lib/pkgconfig":"$(brew --prefix)/lib/pkgconfig"
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j
拉取仓库
git clone --recurse-submodules https://github.com/WerWolv/ImHex.git
上面这个参数--recurse-submodules
一定要加,因为该仓库还引用了一些其他仓库的代码,需要同时拉取。
编译
仓库拉取完毕之后,就是编译了,回到项目根目录
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j
这段编译得有一段时间,稍等一会。
在老旧的机器上记得限制一下make的job的数量,例如`make -j4`,反正我年老的mac虚拟机死了很多次
-j [jobs], --jobs[=jobs]
Specifies the number of jobs (commands) to run simultaneously.
If there is more than one -j option, the last one is effective. If
the -j option is given without an argument, make will not
limit the number of jobs that can run simultaneously.
截图
可怜我的老mac,最终还是提出了抗议。
最终,只能在mac下编译,成功!
编译总结
主要工作在处理依赖和拉取子模块上,需要注意一些细节。
打完收工!
增加插件
工具|如何给爆款编辑器ImHex增加插件窗口灰度图显示插件
工具|为爆款十六进制编辑器ImHex增加实时灰度图显示以下为采坑记录,无兴趣可忽略,划走
失败尝试
--2022.2.8
有时候代码出现问题,也不一定是自己的代码出现了问题,也有可能是开源的代码有问题!!!
在开发插件的过程中,出现了bug,一度以为自己的代码出了问题,调试了很久,甚至自己看了一遍引用库的代码,最后发现,该项目没有使用最新的sbt_image.h,在使用的旧版本的库中, stbi_load_from_memory函数在加载内存中的BMP图像时出现错误!这个bug,调试了很久!
最终的解决方案,下载最新的sbt_image.h,然后重新编译,解决问题!
使用镜像站的坑
插曲 都知道github在墙的作用下,异常的慢。小明同学在拉取仓库的过程中,始终不能成功 作为合法公民的小明同学怎么能爬梯子呢? 所以使用了镜像源,https://github.com/ --> https://github.com.cnpmjs.org/ 把所有的上述字符串进行替换就行了,比如我们的拉取命令 git clone --recurse-submodules https://github.com.cnpmjs.org/WerWolv/ImHex.git 但是问题来了,submodules怎么办呢? 不要着急,先拉去ImHex的原来,然后我们找到项目下有个.gitmodules的文件(隐藏文件,直接vim就可以),像这样完成替换。 vim替换命令拿走不谢
%s/github.com/github.com.cnpmjs.org/g
然后再项目路径./lib/external/下分别拉取上述源,笨办法 这里需要问小伙伴的问题是,我这里替换了里面的字符串,为什么用git submodules update,不管用呢?? 有知道的小伙伴望告知一下,感激不尽!!!
该方案也存在一个问题就是:镜像站的镜像可能不是最新的,例如在编译本项目的过程中
view_disassembler.cpp:305:109: error: use of undeclared identifier 'CS_MODE_BPF_CLASSIC,在旧的镜像站中是没有的,在http://github.com中下载的才有,坑啊!!!
唉没有办法!
下载,解压,重新编译
以下为失败案例,想要在ubuntu 系统上安装pacman编译ImHex,太难了!
pacman安装
To install deb-pacman open the terminal and type:
cd ~/Desktop/
wget https://gitlab.com/TriVoxel/deb-pacman/uploads/9f716f95c66cd90e65157773d6dea05b/deb-pacman_1.0-0.deb
sudo apt update
sudo apt install ./deb-pacman_1.0-0.deb
# from:https://askubuntu.com/questions/1263200/can-i-use-pacman-package-manager-instead-of-apt-in-ubuntu#:~:text=You%20can%20simply%20invoke%20pacman%20instead%20of%20apt,To%20install%20deb-pacman%20open%20the%20terminal%20and%20type%3A
sudo pacman -S glfw file openssl capstone llvm llvm-libs nlohmann-json python3
glfw capstone llvm-libs 找不到数据包