Intel Pin调用应用程序中的函数
Intel Pin call a function in the application program
我正在使用"英特尔引脚"工具对我的应用程序进行一些分析。我有一个插入例程和一个信号处理程序,它在应用程序中进行一些分析,然后根据一些条件调用应用程序中的函数来更新一些值。
我的应用程序是用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时,我会遇到分段错误。图像例程是检查特定函数调用的正确方法吗?我还可以使用应用程序的地址直接访问函数吗?我通过其他方式获得函数的地址,它是有效的,所以这不是问题所在。由于Pin在运行时修改代码,而这个pintool只是修改指令流,在特定条件下,我应该能够跳转到有效地址。你知道我哪里错了吗?
必须使用PIN_CallApplicationFunction API以实际工作的方式调用应用程序中的函数。
相关文章:
- 在C应用程序中运行C++(带有STL)函数
- 错误: 无效使用非静态数据成员"应用程序::应用程序构造函数"
- 将数组作为多线程应用程序中函数的返回传递
- 在Qt应用程序中包含Python.h会导致对Qt函数的未定义引用
- 在静态库中声明函数,在使用该相同库的应用程序中定义它
- 用于检索当前正在使用的应用程序的函数
- 从函数应用程序创建 std::vector
- 执行递归函数时 C++ 应用程序崩溃
- 如何在关闭Qt控制台应用程序之前运行我的析构函数?
- 如何处理异步函数中的异常UWP应用程序getFileFrompathAsync(path);
- 为什么使用 nullPtr 调用函数不会使我的应用程序崩溃
- 如何在应用程序正在运行的系统上查看所需的Windows API函数
- 将函数从控制台应用程序移动到共享库项目似乎会带来不相关的编译错误
- VS2015 应用程序在调用具有委托C++函数时崩溃
- 仅在我退出应用程序后,使用Cout.write()函数在控制台上打印字符串
- Intel Pin调用应用程序中的函数
- c++ 编写一个 cosole 应用程序,您可以从中调用其中定义的函数
- Android本机C 函数呼叫导致应用程序崩溃
- 如何在运行时检查 c++11 元组是否有可能的函数应用程序
- Boost::mpl类型列表函数应用程序