用Pin工具打印每条指令的程序和函数名
Printing program and function name of each instruction with Pin tool
我刚开始编写用于检测程序的 pin 工具。
目前,我有点坚持打印出程序名称(图像?我会说)和指令所属的功能。
比如我我有一个程序foo.cpp和函数名func()那个简单的加法和cout。
然后,当我使用图钉工具时,我想打印如下
0xAddress foo(或 lib64/ld-linux...等)func disassembled_instruction(例如移动等)
我能得到地址和反汇编指令,但不能得到程序和函数名。
谁能告诉我这是否可行以及如何实现?
谢谢!
您可以使用standard predefined macros打印程序和函数名称。
cout << __FILE__ << " " << __FUNCTION__ << endl;
程序名称
要获得主二进制文件的完整路径(因此程序名称),您必须使用 IMG_AddInstrumentFunction.
在 main()
中为 IMG(图像)设置检测例程
在分析回调(传递给 IMG_AddInstrumentFunction
)中使用 IMG_IsMainExecutable 函数,它只是 returns 一个布尔值,指示当前加载的图像是否是主二进制文件(true
) 与否。
如果是前一个函数(IMG_IsMainExecutable
) returns true
你可以调用IMG_Name得到它的完整路径
有关完整示例,请参阅手册中的 Detecting the Loading and Unloading of Images (Image Instrumentation) 示例。
函数名称
在调用 PIN_StartProgram
之前,在主程序中使用 PIN_InitSymbols。
您可以使用 RTN_AddInstrumentFunction 在例程级别进行检测(或从指令、BBL 或 TRACE 中获取例程)。
一旦你有了 RTN(例程),你可以用 RTN_Name 函数得到它的名字。
查看手册中的示例 Procedure Instruction Count (Routine Instrumentation),这应该能让您很好地了解如何使用这些功能。
注意:目标可执行文件必须具有符号信息(symbols):No symbols == no routine names
.
我刚开始编写用于检测程序的 pin 工具。 目前,我有点坚持打印出程序名称(图像?我会说)和指令所属的功能。 比如我我有一个程序foo.cpp和函数名func()那个简单的加法和cout。 然后,当我使用图钉工具时,我想打印如下
0xAddress foo(或 lib64/ld-linux...等)func disassembled_instruction(例如移动等)
我能得到地址和反汇编指令,但不能得到程序和函数名。
谁能告诉我这是否可行以及如何实现?
谢谢!
您可以使用standard predefined macros打印程序和函数名称。
cout << __FILE__ << " " << __FUNCTION__ << endl;
程序名称
要获得主二进制文件的完整路径(因此程序名称),您必须使用 IMG_AddInstrumentFunction.
在main()
中为 IMG(图像)设置检测例程
在分析回调(传递给 IMG_AddInstrumentFunction
)中使用 IMG_IsMainExecutable 函数,它只是 returns 一个布尔值,指示当前加载的图像是否是主二进制文件(true
) 与否。
如果是前一个函数(IMG_IsMainExecutable
) returns true
你可以调用IMG_Name得到它的完整路径
有关完整示例,请参阅手册中的 Detecting the Loading and Unloading of Images (Image Instrumentation) 示例。
函数名称
在调用 PIN_StartProgram
之前,在主程序中使用 PIN_InitSymbols。
您可以使用 RTN_AddInstrumentFunction 在例程级别进行检测(或从指令、BBL 或 TRACE 中获取例程)。
一旦你有了 RTN(例程),你可以用 RTN_Name 函数得到它的名字。
查看手册中的示例 Procedure Instruction Count (Routine Instrumentation),这应该能让您很好地了解如何使用这些功能。
注意:目标可执行文件必须具有符号信息(symbols):No symbols == no routine names
.