DynamoRIO 사용 방법에 대해 문의드립니다.

viiiin의 이미지

안녕하세요.
최근 DynamoRIO를 사용해 보고자 하는 학생입니다.
DynamoRIO는 다들 아시다시피 인텔의 PIN Tool과 유사한 Dynamic Instrumentation Tool입니다.
이 도구를 이용해서 하고자 하는 것은 어떤 프로세스에 대한 보안 분석입니다.

DynamoRIO를 이용해서 어떤 프로세스를 실행하여 얻고자 하는 정보를 얻기 위해서 DLL을 사용하더군요.
물론 윈도우의 경우입니다.
제공하는 샘플 파일을 이용해서 테스트를 해 보면 당연히 잘 되는 것을 확인할 수 있었습니다.

그런데 문제는 제공하는 소스코드를 이용해 제가 컴파일 하여 만든 DLL을 이용하면 제대로 되지 않는다는 것입니다.
정확히 말하면 제가 제대로 컴파일하지 못하고 있다는 말씁입니다... ㅜ_ㅜ

DynamoRIO에서 제공하는 문서와 Wiki에서는 API 정보와 DynamoRIO 빌드 방법 등이 나와있지만,
DLL 파일을 컴파일하는 방법은(너무 쉬운 일이라서 그런지) 나와있지 않습니다.
컴파일 환경은 Visual Studio 2008 SP1입니다.

혹시 DynamoRIO를 사용해 보신 분이 계시다면 한 수 가르쳐주시면 감사하겠습니다.
도와주세요...^^;

감사합니다.

http://www.dynamorio.org/

//----------------------------------------------------------------------
// 참고로 컴파일하려는 소스는 다음과 같습니다.
//----------------------------------------------------------------------
#include "dr_api.h"

#ifdef WINDOWS
# define DISPLAY_STRING(msg) dr_messagebox(msg)
#else
# define DISPLAY_STRING(msg) dr_printf("%s\n", msg);
#endif

static void *stats_mutex; /* for multithread support */
static int num_bb;
static double ave_size;
static int max_size;

static void event_exit(void);
static dr_emit_flags_t event_basic_block(void *drcontext, void *tag, instrlist_t *bb,
bool for_trace, bool translating);

DR_EXPORT void
dr_init(client_id_t id)
{
num_bb = 0;
ave_size = 0.;
max_size = 0;
stats_mutex = dr_mutex_create();
dr_register_bb_event(event_basic_block);
dr_register_exit_event(event_exit);
#ifdef SHOW_RESULTS
if (dr_is_notify_on()) {
# ifdef WINDOWS
/* ask for best-effort printing to cmd window. must be called in dr_init(). */
dr_enable_console_printing();
# endif
dr_fprintf(STDERR, "Client bbsize is running\n");
}
#endif
}

static void
event_exit(void)
{
#ifdef SHOW_RESULTS
char msg[512];
int len;
/* Note that using %f with dr_printf or dr_fprintf on Windows will print
* garbage as they use ntdll._vsnprintf, so we must use dr_snprintf.
*/
len = dr_snprintf(msg, sizeof(msg)/sizeof(msg[0]),
"Number of basic blocks seen: %d\n"
" Maximum size: %d instructions\n"
" Average size: %5.1f instructions\n",
num_bb, max_size, ave_size);
DR_ASSERT(len > 0);
msg[sizeof(msg)/sizeof(msg[0])-1] = '\0';
DISPLAY_STRING(msg);
#endif /* SHOW_RESULTS */
dr_mutex_destroy(stats_mutex);
}

static dr_emit_flags_t
event_basic_block(void *drcontext, void *tag, instrlist_t *bb,
bool for_trace, bool translating)
{
instr_t *instr;
int cur_size = 0;

/* we use fp ops so we have to save fp state */
byte fp_raw[512 + 16];
byte *fp_align = (byte *) ( (((ptr_uint_t)fp_raw) + 16) & ((ptr_uint_t)-16) );

if (translating)
return DR_EMIT_DEFAULT;

proc_save_fpstate(fp_align);

for (instr = instrlist_first(bb); instr != NULL; instr = instr_get_next(instr))
cur_size++;

dr_mutex_lock(stats_mutex);
#ifdef VERBOSE_VERBOSE
dr_fprintf(STDERR,
"Average: cur=%d, old=%8.1f, num=%d, old*num=%8.1f\n"
"\told*num+cur=%8.1f, new=%8.1f\n",
cur_size, ave_size, num_bb, ave_size*num_bb,
(ave_size * num_bb) + cur_size,
((ave_size * num_bb) + cur_size) / (double) (num_bb+1));
#endif
if (cur_size > max_size)
max_size = cur_size;
ave_size = ((ave_size * num_bb) + cur_size) / (double) (num_bb+1);
num_bb++;
dr_mutex_unlock(stats_mutex);

proc_restore_fpstate(fp_align);

return DR_EMIT_DEFAULT;
}

viiiin의 이미지

글 쓰기 전에는 발견을 못했던 것이 글을 쓰고 나니 곧바로 보이네요...ㅜ_ㅜ

http://css.csail.mit.edu/6.858/2010/labs/dr-docs/API_samples.html

viiiin의 이미지

개인적으로 DynamoRIO를 사용해신 분의 경험담과 노하우를 들었으면 합니다~

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.