行业新闻
16进制编辑器(16进制编辑器教程)
2022-04-09 11:34  浏览:4

ImHex火了有一阵子了,像这样

机器之心:狂揽2500星,开源十六进制编辑器登顶GitHub热榜365 赞同 · 36 评论文章

ImHex是什么?

那么这么火他到底是个什么呢?

ImHex是一款功能强大的十六进制编辑器,该工具专为逆向工程分析师、编程开发人员以及那些想好好保护自己眼睛的安全人员所设计。哪怕你每天工作到凌晨三点(虽然不建议),也不会伤害你的眼睛!

为什么这么火呢?

首先一定是颜值

上截图

其次,一定是开源特性

ImHex是一款开源的十六进制编辑器。开源地址为

https://github.com/WerWolv/ImHexgithub.com/WerWolv/ImHex

使用C++20编写,内部使用插件式管理方法加载窗体,其扩展性非常的强,开发上手也很快。

相比之下,一些编辑器如010Edit,作为闭源产品收费较贵,显然ImHex让开源社区眼前一亮,都有一种“我也能开发编辑器的感觉”,而且事实上也确实是这样

下面就让我们来试试这款 raising star

编译ImHex

首先系统选择Ubuntu20.04

不要问问为什么不是ubuntu18,16,问了就是不符合编译要求,要么是这些系统上编译工具版本低,缺少一些新的特性,要么就是依赖安装不上

安装依赖

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"

注意:

在cmake运行前要,export CXX=g++-10,否则汇报有些头文件找不到的错误,例如span头文件

拉取仓库

 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.

这CPU占用率,可怜了我的老mac

这CPU占用率,可怜了我的老mac

截图

可怜我的老mac,最终还是提出了抗议。

最终,只能在mac下编译,成功!

编译总结

主要工作在处理依赖和拉取子模块上,需要注意一些细节。

打完收工!

失败尝试

使用镜像站的坑

插曲 都知道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中下载的才有,坑啊!!!

唉没有办法!

下载,解压,重新编译