我正在尝试使用Intel-pin工具。我有一个简单的string = ("'"+df['type']+"'").str.cat(sep=',')
string
"'a','b','c'"
(它只打印“ Hello world”)(例如Hello-world.c
)。如果要从二进制文件生成程序集,则可以执行a.out
。
我想以此为指导。
在插桩之前(可以通过objdump轻松完成)和插桩之后,是否可以使用大头针工具获得objdump?
我已经创建了一个打印所有说明的工具。
objdump -D a.out
它会打印汇编说明,但是我不确定它是否包含已安装的说明。
这是执行此操作的正确方法吗?你能帮我吗?
答案 0 :(得分:1)
在插桩之前(可以通过objdump轻松完成)和插桩之后,是否可以使用大头针工具获得objdump?
您将需要一种方法来告诉PIN引擎您要对objdump的结果进行处理。例如,您可能希望通过脚本链接它们。这完全取决于您想要做什么。
这是执行此操作的正确方法吗?
取决于您要确切执行的操作,但我想不是。
PIN中的仪器和分析之间有明显的区别。一旦理解,其余的操作(相对)就容易了。
从概念上讲,PIN仪表包含两个组件:
话虽这么说,重要的一点:
因此,当您拥有:
// set up the **instrumentation**
INS_AddInstrumentFunction(Func_Instrumentation, 0);
您正在设置检测(然后仅被调用一次)。如果您需要在每次执行一条指令(或BBL,TRACE)时调用一次回调,则需要设置一个分析例程,例如:
// this is the **analysis** routine.
// This function is called before every instruction is executed
VOID docount() { icount++; }
// The is the **instrumentation routine**, called by INS_AddInstrumentFunction().
// Pin calls this function each time a **new** instruction is encountered
// Note that is won't be called for the same instruction after the first time.
VOID Func_Instrumentation(INS ins, VOID *v)
{
// Insert a call to docount before every instruction, no arguments are passed
INS_InsertCall(
ins, // a representation of the instruction
IPOINT_BEFORE, // where to insert, relative to the instruction
(AFUNPTR)docount, // the analysis routine
IARG_END); // no args to pass to the analysis routine
}
仔细检查可用的指令计数样本:
source/tools/ManualExamples/inscount0.cpp