【发布时间】:2019-06-28 20:51:06
【问题描述】:
我正在尝试使用 intel-pin 工具。我有一个简单的Hello-world.c(它只打印“Hello world”)程序(比如a.out)。如果我想从二进制文件生成程序集,我会做objdump -D a.out。
我想在其中插入一些说明。
是否可以使用 pin 工具获取 objdump,在检测之前(这可以通过 objdump 轻松完成)和检测之后?
我创建了一个打印所有说明的工具。
#include <stdio.h>
#include "pin.H"
#include <cstdint>
FILE * trace;
KNOB<string> KnobOutputFile(KNOB_MODE_WRITEONCE, "pintool", "o", "pinatrace.out","A pin tool");
VOID Count(INS ins, void *v) {
fprintf(trace,"\n%s",(INS_Disassemble(ins)).c_str());
}
VOID Fini(INT32 code, VOID *v)
{
printf("count = %ld\n",(long)icount);
fprintf(trace, "#eof\n");
fclose(trace);
}
/* ===================================================================== */
/* Print Help Message */
/* ===================================================================== */
INT32 Usage()
{
PIN_ERROR( "This Pintool prints a trace of memory addresses\n"
+ KNOB_BASE::StringKnobSummary() + "\n");
return -1;
}
/* ===================================================================== */
/* Main */
/* ===================================================================== */
int main(int argc, char *argv[])
{
if (PIN_Init(argc, argv)) return Usage();
trace = fopen("pinatrace.out", "w");
INS_AddInstrumentFunction(Count, 0);
PIN_AddFiniFunction(Fini, 0);
// Never returns
PIN_StartProgram();
return 0;
}
它会打印组装说明,但我不确定它是否包含检测说明。
这是正确的方法吗?你能帮帮我吗?
【问题讨论】:
-
PIN 是透明的;您可以认为检测后的代码与检测前的代码相同(当然,实际代码与检测前完全不同,但这是 PIN 的实现细节,纯属魔法)。