#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 |