【发布时间】:2016-05-23 09:25:37
【问题描述】:
我的主要要求是对提到的反调试检查程序进行两次分析(一次在有调试器的情况下,另一次在没有调试器的情况下)以收集一些信息以在运行时进行分析(假设只有二进制文件是可用)
#include <stdio.h>
#include <sys/ptrace.h>
int i_am_debugged()
{
if (ptrace(PTRACE_TRACEME, 0, 1, 0) < 0)
{
printf("Avoid debugging please");
return 1;
}
return 0;
}
int main()
{
if(i_am_debugged())
{
return 1;
}
printf("It's going well ! No debugging !\n");
return 0;
}
目前,我为此编写了一个英特尔 PIN 工具,但由于 PIN 的工作方式并始终执行“一切顺利!没有调试!'。
所以,我的问题:
我能做些什么(附加调试器并运行 pin 工具或其他东西)来使用我的 PIN 工具分析两种类型的运行,或者任何其他类型的分析(例如二进制翻译等)可以帮助我吗?案例?
我想收集有关指令的特定信息,而不仅仅是调用图等,因此想要一些类似于 PIN 的 C++ 程序员接口的功能。
一个详细的答案会很好,谢谢。
【问题讨论】:
-
我真的不明白你在这里遇到了什么问题。您遇到的问题是无法附加调试器吗?
-
我想要的是附加一个调试器并同时使用 pin 工具进行配置。请参阅 Felix 的答案和相应的 cmets 以了解我面临的确切问题。我已经尝试过 [software.intel.com/sites/landingpage/pintool/docs/67254/Pin/… 中的说明。但是,当我在 PIN 和 gdb 的控制下运行上述代码时,仍然没有检测到 gdb。
-
我明白了。 Pin 使用 Linux 调试接口 (ptrace) 将自身注入到应用程序中。这使得 Pin 和调试器之间的交互变得困难。具体来说,您无法使用 gdb 启动 Pin 并获得预期的行为。此外,由于 Pin 的工作方式,在调试器中放置断点之类的操作不会按预期工作。我认为您最好的选择是使用 Pin 启动,然后在 Pin 使用 -pause_tool 旋钮等待您时附加调试器。但是,如前所述,不要期望能够在应用程序上透明地使用 gdb。
-
谢谢,会试一试。我尝试使用 [software.intel.com/sites/landingpage/pintool/docs/67254/Pin/… 中给出的 -appdebug,但输出仍然是“进展顺利!没有调试! .您认为像 ATOM 或其他工具这样的工具更适合我的用例吗?因为,我是仪表和分析的新手,所以我不太了解。
-
对不起,上面的链接应该指向 Pin Advanced Debugging Extensions ,由于某种原因它一直在变化。而且,当您说暂停 pin 工具然后附加 gdb 时,您的意思是将 gdb 附加到 Pin 工具或应用程序?附加到 Pin 工具没有帮助,对吧?此外,它会与 -appdebug 非常相似,对吧?
标签: linux debugging profiling ptrace intel-pin