【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 用來作爲編譯器和鏈接器。

這裏只是簡單的描寫一下配置問題,如果有不會的可以查閱文檔 或在 下方留言。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章