【逆向执行】在Ubuntu20.04下搭建pomp环境
在 Ubuntu 20.04 下搭建 pomp 环境
pomp 只能分析 32 位程序。作者给出的编译方式只能用于在 32 位 Linux 环境下编译。我在 docker 中使用了 32 位的 ubuntu 镜像来编译 pomp,是可行的,但使用不太方便。我希望在 Ubuntu 20.04 下使用 IDE 源码调试 pomp。
编译定制过的 libdisasm-0.23
在编译 libdisasm-0.23 时,需要编译为 32 位可执行文件。
先安装一些依赖:
1 | sudo apt-get install lib32z1 |
然后对 libdisasm-0.23 进行编译。因为必须编译成 32 位的库文件,在参考了 在64为环境下用configure 产生32位的Makefile-wwm-ChinaUnix博客 之后,编译语句如下:
1 | cd libdisasm-0.23 |
此时,在 libdisasm-0.23/build/lib
目录下就会生成 libdisasm.a 和 libdisasm.so 文件,还生成了 include 目录。在 CmakeLists.txt 中我们会引用它们。
在 Clion 中编译 reverse-from-coredump
用 clion 打开 reverse-from-coredump 目录。由于源码并没有使用 cmake 组织,所以需要我手动编写一个 cmakelist。
根据 reverse-from-coredump/src/Makefile.am
的内容,可以看到编译 pomp 使用的源码文件包括:
1 | handler_arithmetic.c handler_bit_manip.c handler_comparison.c handler_controlflow.c handler_logic.c handler_move.c handler_other.c handler_sse.c handler_stack.c handler_string.c handler_system.c handler_flag_manip.c handler_interrupt.c access_memory.c alias_manager.c common.c disassemble.c heuristics.c global.c inst_handle_resolve.c process_binary.c process_core.c process_inst_data.c process_thread.c re_dsmanager.c re_insttable.c re_mem_alias.c re_opdvalue.c reverse_log.c analyze_result.c reverse_execution.c reverse_instructions.c |
以及 reverse-from-coredump/include
目录下的所有文件。
所以在编写 CmakeLists.txt 中需要包括:
- 上面提到的源码文件
reverse-from-coredump/include
目录下的所有文件/usr/lib/i386-linux-gnu/libelf.a
(即前面安装的 libelf-dev:i386)libdisasm-0.23/build/lib/libdisasm.a
(即前面手动编译的 libdisasm)
此外,还需要设置 CFLAGS 包含 "-m32 -msse4.1"
,参数 -msse4.1
是从 reverse-from-coredump/src/Makefile.am
里复制过来的。
编写 CmakeLists.txt 如下:
1 | set(CMAKE_C_STANDARD) |
然后直接在 clion 中编译即可。
一开始没有加 -DDEBUG,导致运行时没有任何输出,害我调试很久。。