一个踩坑过程的学习笔记,也是一篇总结、一段历练。
当初以为很简单,结果让我焦头烂额;历经人为设坑、胡思乱搞、各种折腾,几度中断,想过放弃,但不甘心;摆平急功近利心态,理清思路,积累经验,利用碎片时间,缓慢成长,终得此文。写出来,分享大家,为你助力。
思来,还是水平太low了,让大家见笑。
本来想分开写两篇的,分别是kali下的cmake ELF程序,以及 Windows下WSL(Ubuntu)+Vs2022编译ELF程序。可能稍微长点,但主要是考虑到两者有很多相通的点,故现在合成一篇。
===========================================
一、kali下的cmake ELF程序
(一)起因
起因是编译一个bddisasm的工具(https://github.com/bitdefender/bddisasm)。windows下的编译一切顺利。
但,里面有个disasmtool_lix的linux的程序,
我就想编译成linux ELF程序。
(二)折腾开始
这就是折腾的开始。各位可以在不看我下面的过程前,自已走一遍。你很顺利,说明你懂。跟我一样的,说明不太懂这个,有必要接下来看看。
刚开始时,我是用vs2022搭配WSL来搞的,不顺利,没走下去,应该是我不懂的原因。后来还是在kali下完成了过程,下面就用这个来讲下过程,WSL里编译下一篇讲讲。
事后总结(多么痛的领悟):一切的灾难都是因为不了解CMakeLists.txt这个东东,没有理解disasmtool_lix这个目录和上层目录bddisasm之间的关系,以为两者是可以割裂开的;没有弄懂这三者的关系,单纯的只想着将disasmtool这个编译成ELF文件,而没有将bddisasm和bdshemu编译成linux下的库。
各种乱捣鼓,头破血流。
(三)正确过程
下面记录正确的过程:
1、安装cmake:apt-get install cmake
2、安装vcpkg:apt-get install vcpkg
3、安装pkg-config:apt-get install pkg-config
4、进入vcpkg目录
5、./vcpkg install bddisasm
6、找到CMakeLists.txt,有很多,我们要的disasmtool_lix下的
进入到buildtrees/bddisasm/src/v....clean目录下
7、如下命令编译:
mkdir build
cmake -B build .
出现一个报错:
错误提示好几排,我当时的重点放在黄色框中的RapidJSONConfig.cmake或rapidjson-config.cmake这两个文件上,到处找这两个文件。后来才反应过来,不应该这样找,应该是找RapidJSON这个整库。
8、在github上找到RapidJSON,git clone下来后,
mkdir build
cmake -B build .
cmake --build build
然后安装,
cmake --build build --target install
说明安装成功了。
9、回到主题上
cmake -B build .
cmake --build build
显示编译成功了。
运行下:
成功完成!
(四)最后
其实,我们是应该来读CMakeLists.txt这个文件内容的,里面详细地记录了。尤其是在:
这里的find_package(bddisasm)和(RapidJSON),让我折腾了很久,然后又回过头来读作者的原文介绍,才理解了可能原因。
说一千道一万,还是“难者不会,会者不难”。
===========================================
二、Windows下WSL(Ubuntu)+Vs2022编译ELF程序
(一)安装WSL
1、在网上下载个WSL的安装程序;
2、wsl启动,然后wsl --list查看,并用wsl --install 默认安装Ubuntu;
3、git clone https://github.com/microsoft/vcpkg.git
4、cd vcpkg
运行 apt-get install curl zip unzip tar
运行 bootstrap-vcpkg.sh
这时,运行./vcpkg成功。
(二)Vs2022编译过程:
1、安装cmake:apt-get install cmake
2、安装pkg-config:apt-get install pkg-config
3、进入vcpkg目录
4、在github上找到RapidJSON,git clone下来后
mkdir build
cmake -B build .
cmake --build build
然后安装,
cmake --build build --target install
安装成功 RapidJSON
5、进入到buildtrees/bddisasm/src/v....clean目录下
mkdir build
cmake -B build .
cmake --build build
cmake --build build --target install
安装成功 Bddisasm
6、在Vs2022中编译,
选择WSL,以及WSL-GCC-Debug编译器
7、重新生成CMake
显示编译成功。
三、总结
上面利用两种方法:分别是 Linux中利用Cmake来编译ELF程序,以及Windows中配置WSL的Ubuntu利用Cmake+Vs2022来编译ELF程序,过程不是一蹴而就,有点曲折而复杂。
通过两种方法的对比,逐渐理清了思路,在排错的过程中有了一些深刻的认识,虽然想过放弃,但坚持下来后,感觉收获挺大,特分享给大家,希望喜欢。
原文始发于微信公众号(MicroPest):kali+cmake编译ELF程序 和 Windows+WSL(Ubuntu)+Vs2022编译ELF程序的踩坑记录
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论