【DynamoRIO 入门教程】一:客户端的配置与编译

正在学习 DynamoRIO ,为了方便后面的同学入门,特写了这一个系列的博客,主要通过分析 DynamoRIO 自带例子的源码 来带领大家入门。

要明白DynamoRIO 的工作机制,看文档是必不可少的:
首先是配置问题:文档链接(http://dynamorio.org/docs/page_deploy.html#win_deploy)
一般情况下,在学习阶段,我们不需要去特殊配置环境变量什么的,直接下载 DybamoRIO 的 release 版本。我们写好 客户端 的 .c 文件后,使用 cmake 来调用 DynamoRIO 库进行编译。编译完成后,直接使用 drrun.exe 去加载客户端 并运行目标程序。

这里我主要说一下cmake 的问题,至于如何使用 drrun.exe 可以自己看文档。
DynamoRIO Release 发行版里 有这样一个文件夹: DynamoRIO-Windows-7.0.17873-0\cmake,cmake文件夹里存放的是一堆以 .cmake结尾的文件,这些是cmake 的配置文件,主要是用于第三方库的配置。也就是说,当我们使用 DynamoRIO 作为第三方库时,就需要这些配置文件里的信息 来帮助我们进行编译与链接。那么如何使用呢?
这里我给一个 CMakeLists.txt 文件,CMakeLists.txt 是 cmake 的编译配置文件,cmake根据该文件的信息来组织目标项目。

cmake_minimum_required(VERSION 2.6)

if (NOT "${DynamoRIO_DIR}" STREQUAL "")
	project(bbsize)

	set(output_dir "${PROJECT_BINARY_DIR}/bin")
	set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${output_dir}")
	set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}")
	set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${output_dir}")

	find_package(DynamoRIO)
	if (NOT DynamoRIO_FOUND)
		message(FATAL_ERROR  "DynamoRIO package required to build")
	endif (NOT DynamoRIO_FOUND)

#  下面的是我们需要修改的部分:
	add_library(bbcount SHARED bbcount.c)
	configure_DynamoRIO_client(bbcount)
	use_DynamoRIO_extension(bbcount drmgr)
	use_DynamoRIO_extension(bbcount drreg)
	use_DynamoRIO_extension(bbcount drx)

endif ()

大家使用时需一部分的内容,add_library 是我们要生成的客户端,bbconut 是项目名,bbcount.c 是源文件。
drmgr, drreg, drx 是使用的 extension。
所以使用时只需要把 bbcount 改成对应的客户端名, 把 extension 名修改为我们使用的extension。

要编写 CMakeLists.txt 需要一定的cmake 的基础,可以看一下 cmake 的官方文档。

然后再命令行使用:

mkdir build
cd build
cmake -DDynamoRIO_DIR=C:\Users\Mr.wang\Documents\WIN_AFI\test\DynamoRIO-Windows-7.0.17873-0\cmake   ..
 cmake --build  . --config  Release

这几行命令会编译我们的客户端,不过我们需要安装一下 vs 用来作为编译器和链接器。

这里只是简单的描写一下配置问题,如果有不会的可以查阅文档 或在 下方留言。

猜你喜欢

转载自blog.csdn.net/m0_37921080/article/details/88104833
今日推荐