gpt4 book ai didi

c++ - Intel Pin在应用程序中调用函数

转载 作者:太空宇宙 更新时间:2023-11-04 03:20:06 24 4
gpt4 key购买 nike

我正在使用 Intel Pin 工具对我的应用程序进行一些分析。我有一个检测例程和一个信号处理程序,它们在应用程序中进行一些分析,然后根据某些条件调用应用程序中的函数来更新一些值。

我的应用程序是用C写的,如下-

int pin_flag; //global variable in the C program

void access_from_pin()
{
pin_flag = 1;
}

void Check() //empty function in C
{
}

int main()
{
while(!pin_flag)
{
Check();
}
printf("Pin has changed the flag");
}

我在C++中的Pintool如下-

VOID check_routine(THREADID tid, ADDRINT ret)
{
ADDRINT *addr = ; //hardcode address of the function access_from_pin
((void(*)(void))addr)();
}

VOID Image(IMG img, VOID *v)
{
RTN check_call = RTN_FindByName(img, "Check");
if (RTN_Valid(check_call))
{
RTN_Open(check_call);

RTN_InsertCall(check_call, IPOINT_AFTER, (AFUNPTR)check_routine,IARG_THREAD_ID,IARG_END);

RTN_Close(check_call);
}

}

int main(int argc, char *argv[])
{
PIN_InitSymbols();

if (PIN_Init(argc, argv))
return Usage();

/* Image Instrumentation function*/
IMG_AddInstrumentFunction(Image, 0);

PIN_StartProgram();
return 0;
}

当我将应用程序作为 C 程序运行我的 pintool 时,出现了段错误。 Image 例程是检查特定函数调用的正确方法吗?我也可以使用它的地址直接从应用程序访问函数吗?我通过其他方式获得函数的地址,它是有效的,所以这不是问题所在。由于 Pin 在运行时修改代码,而这个 pintool 只是修改指令流,在特定条件下我应该能够跳转到有效地址。我哪里出错了?

最佳答案

您必须使用 PIN_CallApplicationFunction API 以实际可行的方式调用应用程序中的函数。

关于c++ - Intel Pin在应用程序中调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47205933/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com