我刚开始编写用于测试程序的销钉工具。 目前,我有点想打印程序名称(图像?我会说)和指令所属的功能。 例如,我有一个简单的加法和cout程序foo.cpp和函数名func()。 然后,当我使用图钉工具时,我想像下面那样打印
0xAddress foo(或lib64 / ld-linux等)func disassembled_instruction(例如move等)
我可以获取地址和反汇编的指令,但不能获取程序和函数的名称。
谁能给我建议这是否可能,如何?
谢谢!
答案 0 :(得分:1)
程序名称
要获取主二进制文件的完整路径(因此为程序名),必须使用IMG_AddInstrumentFunction在main()
中为IMG(图像)设置检测例程。
在分析回调(传递给IMG_AddInstrumentFunction
中)中使用IMG_IsMainExecutable函数,该函数仅返回一个布尔值,指示当前加载的图像是否是主二进制文件(true
)。< / p>
如果前一个函数(IMG_IsMainExecutable
)返回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)的手册,该示例应该为您如何使用这些功能提供一个良好的开端。
注意:目标可执行文件听起来很明显,但必须具有符号信息(符号):No symbols == no routine names
。
答案 1 :(得分:0)
可以使用standard predefined macros用于打印出的程序和函数名。
cout << __FILE__ << " " << __FUNCTION__ << endl;