ptrace头文件 如何使用ptrace函数来获得多线程的一致看法?
浏览量:2763
时间:2021-03-10 19:35:47
作者:admin
如何使用ptrace函数来获得多线程的一致看法?
有一天,我在Mac下调试了一个应用程序。我刚挂了GDB,在网上找到的。似乎应用程序添加了ptrace()函数来阻止调试。网上有一种突破的方法。加载程序后,在ptrace方法的顶部和底部断点处中断ptrace,然后运行它。然后我将详细介绍ptrace方法并查看堆栈。然后我将在这里输入return并输入C继续运行
您可以使用指针指向函数,如下所示:
int func(int x)/*声明函数*/
int(*f)(int x)/*声明函数指针*/
f=func/*在Linux中将func函数的第一个地址分配给指针f,每当进程调用dlopen打开动态链接库时,它都会相应地维护进程的一个链接,并在进程中添加新加载库地址空间的基本信息,然后更新符号。因此,只要遍历链接找出要查找的项的地址范围,就可以找到动态库的名称,然后减去进程加载的起始地址,得到动态库中的相对地址。这就是dladdr的原理。虽然工作中遇到的操作系统不是Linux,但是glibc的实现是相似的。因为它是嵌入式的,所以更简单。链接的第一个地址保存在老苏而且这个链接也是一个记录动态库信息的特殊结构,比Linux下的hodgepodge要简单得多:)所以我用ptrace直接挂载目标进程,peek保存链接第一个地址的数据更方便,然后一个接一个地查询~~~这样我就不用再担心了我已经厌倦了远程调试。找到相对地址后,我直接使用GDB中的Infoline,
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。