본문 바로가기
pintool

내장함수의 리턴값 바꾸기

by sonysame 2018. 10. 17.
#include "pin.H"
#include <iostream>

VOID change_eax(ADDRINT insAddr, CONTEXT *ctx, ADDRINT * pEAX)
{
   *pEAX = 20;
}


VOID ImageLoad(IMG img, VOID *v)
{
   RTN print_rtn = RTN_FindByName(img, "strlen");

   if (RTN_Valid(print_rtn))
   {
      RTN_Open(print_rtn);
      RTN_InsertCall(print_rtn, IPOINT_AFTER, (AFUNPTR)change_eax,
         IARG_ADDRINT, "change_eax",
         IARG_CONTEXT,
         IARG_REG_REFERENCE, REG_EAX,
         IARG_END);
      RTN_Close(print_rtn);
   }
}

int main(INT32 argc, CHAR *argv[])
{
   PIN_InitSymbols();
   if (PIN_Init(argc, argv)) return -1;
   IMG_AddInstrumentFunction(ImageLoad, 0);
   PIN_StartProgram();
   return 0;
}

strlen을 사용해서 해당 함수의 리턴값을 바꾸는 코드이다. 리턴값은 eax에 저장이 되므로 해당 루틴이 끝나자마자 eax의 값을 바꾸어서 strlen리턴값을 바꾸어주었다. 

'pintool' 카테고리의 다른 글

memory break_inline  (0) 2018.10.17
RDTSC  (0) 2018.10.17
helloworld출력 프로그램에서 출력하는 문자열 바꾸기  (0) 2018.10.15
Find executable img, section, code  (0) 2018.10.12
Disassemble  (0) 2018.10.12