2014年3月6日

Linux Debugging(七): 使用反汇编理解动态库函数调用方式GOT/PLT

摘要: 本文主要讲解动态库函数的地址是如何在运行时被定位的。首先介绍一下PIC和Relocatable的动态库的区别。然后讲解一下GOT和PLT的理论知识。GOT是Global Offset Table,是保存库函数地址的区域。程序运行时,库函数的地址会设置到GOT中。由于动态库的函数是在使用时才被加载,因此刚开始GOT表是空的。地址的设置就涉及到了PLT,Procedure Linkage Table,它包含了一些代码以调用库函数,它可以被理解成一系列的小函数,这些小函数的数量其实就是库函数的被使用到的函数的数量。简单来说,PLT就是跳转到GOT中所设置的地址而已。如果这个地址是空,那么PLT的跳. 阅读全文

posted @ 2014-03-06 18:46 anzhsoft 阅读(761) 评论(0) 推荐(0) 编辑

Linux Debugging(六): 动态库注入、ltrace、strace、Valgrind

摘要: 实际上,Linux的调试方法非常多,针对不同的问题,不同的场景,不同的应用,都有不同的方法。很难去概括。本篇文章主要涉及本专栏还没有涵盖,但是的确有很重要的方法。本文主要包括动态库注入调试;使用ltrace命令处理动态库的调试;使用strace调试系统调用的问题;Valgrind的简要介绍。1. 动态库注入 如何排除其他library的调用问题?动态库注入(library injection)有可能会让你事半功倍。一个大型的软件系统,会用到非常多的动态库。那么如果该动态库的一个api调用出了问题,而调用该api的地方非常非常多,不同的调用都分散的记录在不同的log里。那么,如何快速的找到是.. 阅读全文

posted @ 2014-03-06 11:20 anzhsoft 阅读(585) 评论(0) 推荐(0) 编辑

导航