[[완료]]dynamic Instrumentation Tool

jungwook의 이미지

안녕하세요??

Pin이라는 Binary Instrumentation Tool 을 알게 되었는데, 이해가 잘안되서 질문드립니다.
먼저 Dynamic Binary translator와 Binary Instrumentation이 먼지 좀 알려주세요.

제가 현재까지 알게 된 것은 Bynary Instrumentation은 소스코드내에서 어떤 부분에 특별한 코드를 넣고 원하는 것을 분석하는 것 같은데,

but rather adds the code dynamically while the executable is running. This also makes it possible to attach Pin to an already running process.
이 부분이 이상한 것이 실행중인 동안 코드를 다이나믹하게 넣을 수 있다는데, 어떻게 되는 것인지 ?? 잘모르겠네요.
링크 겁니다.

http://www.pintool.org/

tokki2cut의 이미지

PIN은 쉽게 이야기하면 프로세스 기반 가상화 기술을 이용한 바이너리 번역기(Translator)입니다. 즉, 어떤 프로세스를 PIN을 이용해서 실행시키게되면 그 프로그램이 직접 로드되서 실행되는게 아니라 PIN이 해당 바이너리를 읽어가면서 실시간에 translation을 해 가면서 그 번역된 코드가 실행되는 겁니다. 즉 일종의 가상머신이죠..

PIN을 이용하게 되면 질문의 내용처럼 어떤 코드를 삽입하여 수행할 수가 있는데 그 자체를 Instrumentation이라고 합니다. 보통 그 삽입되는 코드는 관찰용, 즉 어떤 분석을 위한 용도로 사용되는데.. 예를 들어 메모리 퍼포먼스, footprint, 측정이라던지,.. 아니면 보안 test목적으로 관찰이라던지.. 그래서 보통 삽입되는 코드를 analysis코드 또는 analysis함수라고 하며(메뉴얼에도 그렇게 되어 있죠?) 그 analysis 코드를 넣는 행위 자체를 instrumentation이라고 합니다. PIN말고도 dynamoRIO (이건 가상머쉰 소스코드까지 공개 되 있음)나 Dyninst 같은 다른 instrumentation이 가능한 것들도 많고요.. Bochs같은 시스템 에뮬레이터를 이용하면 아예 운영체제 동작을 감시할 수 있도록 instrumentation도 가능하고요.. 좀 설명이 셌네요 -_-;;

여하튼... PIN이 실시간에 한 코드를 다른 코드로 번역을 해가면서 수행을 하기 때문에.. 그 실시간 번역중에 당연히 커스텀한 analysis코드를 넣을 수 있는 거죠. PIN은 그러한 API를 제공해 줍니다.. 여러 레벨의 instrumentation을 제공해 주는데.. 함수 단위로 analysis함수를 호출하게 해 주거나,, 또는 basic block단위.. 또는 아예 instruction(기계어)단위까지 자기가 원하는 함수를 넣을 수 있겠죠.. 예를 들어.. 메뉴얼에 나와 있는 것처럼.. ++i 코드를 넣어서 수행되는 모든 instruction 계수를 샐 수도 있는 거고..뭐 메모리도 읽고, 레지스터 값도 읽고.. 뭐 그런 여러가지 동적인 상황에서 얻을 수 있는 데이터를 얻을 수 있고 또한 동작을 변경할 수도 있습니다 (레지스터 메모리 값 변경, 함수 치환 등등..)

대신 퍼포먼스가 좀 느리다는 단점이 있습니다.. (이건 프로세스 기반 가상머쉰의 아키텍쳐적인 차이에 관한 이해가..) 어쨋든.. PIN 에 있는 문서만 한번 천천히 읽어 보셔도 전반적인 이해가 될겁니다. 문서가 잘 되 있어서..

사실 Dynist나 DynamoRIO 또 리눅스 전용Valgrind 여러가지가 있지만.. PIN이 젤 테스트도 많이 되고 실제 Intel에서 제품으로도 이용하고.. 리눅스 윈도 둘다 되고.. 괜찮은 거 같습니다.. 단 만능은 아닙니다.. :) 사용 목적에 따라 여러가지 제약이 있죠.. 2년 전에 PIN을 가지고 엄청 노가다 프로젝트를 한 악몽이 ㅜ.ㅜ

jungwook의 이미지

제가 이해했던 것보다 훨씬 자세한 설명 감사드립니다.
지금 시뮬레이터를 하나 보고 있는데, 프론트 엔드로 PIN을 사용한 것이라 궁금해서 글을 남겼었습니다. ㅎㅎ
근데 PIN을 가지고 어떤 프로젝트를 하셨나요? ㅎㅎ 시뮬레이터를 만드신건가요?

tokki2cut의 이미지

아.. 저는 정보흐름 추적용으로 dynamic taint analysis라는 보안 목적용 도구를 만드는 거 였는데.. 그 도구를 만들기 위해.. 일일이 어셈블러 명령 하나하나 스펙 봐 가면서analysis함수를 넣어야 하는 엄청 노가다 작업이 었어요 -_-;; ㅋㅋ

아무튼 한국에서 PIN을 사용하시는 분을 보니.. 반가워서 답글을 달아봤습니다 :)

M.W.Park의 이미지

tokki2cut님께서 잘 설명해주셨는데요.
이해를 돕기위해 원론적인 것 한마디만 첨언하자면, instrumentation이란 원래 코드에 뭔가를 덧붙이는 것을 말합니다.
(목적은 모니터링이나 각종 통계(커버리지 측정 등), 예외 상황 시뮬레이션 등으로 알고있습니다.)

소스코드가 실행 파일로 변환되는 과정에서 몇번의 단계를 거치는데, 이론적으로는 각 단계마다 instrumentation이 가능합니다.
C를 예로들자면,
1. 전처리 전의 원래 C 코드,
2. 전처리기를 거친 후 컴파일러에 입력으로 주어지는 C 코드,
3. linkage 단계 직전의 object 코드,
4. 마지막으로 실행파일 자체.
등의 여러 단계에서 instrumentation이 가능합니다.

binary instrumentation이라는 것은 상기 4번의 실행파일 자체를 instrumentation한다는 말이며,
dynamic이라는 것은 (VM같은 방법을 써서) runtime에 instrumentation을 한다는 말입니다.

이와는 다른 접근법으로는 실행파일을 disasemble해서 instrumentation하는 방법도 가능합니다.
(아마도 static binary instrumentation이라고 불리겠죠.)

-----
오늘 의 취미는 끝없는, 끝없는 인내다. 1973 法頂

-----
오늘 의 취미는 끝없는, 끝없는 인내다. 1973 法頂

adioshun의 이미지

저도 이번에..PIN을 이용한 프로젝트를 기획하고 있어서..글 잘 보고 갑니다..

익명 사용자의 이미지

6년이 지난 지금..
PIN 에 대해 연구중이랍니다.. 또 답변이 달릴 수 있으려나 !

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.