04 2018 档案
ARP 协议抓包分析
摘要:ARP(Address Resolution Protocol)- 地址解析分析 ARP 协议是根据IP地址获取物理地址的一个TCP/IP协议。 当PC1 想与 PC2 进行通信时,需要同时知道PC2的IP地址和MAC地址,相当于既要知道“房间号”(相当于IP),也要知道“住户的身份证号”(相当于M
动态链接的步骤
摘要:1. 动态链接器自举 (1)动态链接器本身不依赖任何共享对象 (2)通过一段精巧的启动代码完成自身全局和静态变量的重定位而在过程中又不会用到全局和静态变量 而这个有限制条件的启动代码过程被称为自举 2.将依赖的共享对象映射到进程空间 完成自举后,动态连接器将可执行文件和链接器本身的符号表都合并到一个
ELF 动态链接 - so 的 重定位表
摘要:动态链接下,无论时可执行文件还是共享对象,一旦对其他共享对象有依赖,也就是所有导入的符号时,那么代码或数据中就会有对于导入符号的引用。而在编译时期这些导入符号的确切地址时未知的。只有在运行期才能确定真正确切的地址 静态编译下,这些未知的地址会被编译器一一修正。 对于动态链接来说,共享文件有两种编译方
ELF 动态链接 so的动态符号表(.dynsym)
摘要:静态链接中有一个专门的段叫符号表 -- “.symtab”(Symbol Table), 里面保存了所有关于该目标文件的符号的定义和引用。 动态链接中同样有一个段叫 动态符号表 -- “.dynsym”(Dynamic Symbol) , 但.dynsym 相对于 .symtab 只保存了与动态链接
ELF 动态链接 - so 的 .dynamic 段
摘要:动态链接文件中最重要的段就是 .dynamic段 这个段里保存了动态链接器需要的最基本的信息 比如:1. 依赖于哪些共享对象, d_tag = DT_NEED, d_ptr 表示共享对象文件名 2. 动态链接符号表的位置 d_tag = DT_SYMTAB, d_ptr 表示“.dynsym”的地址
ELF 文件 动态链接 - 地址无关代码(GOT)
摘要:Linux 系统中,ELF动态链接文件被称为 动态共享对象(DSO,Dynamic Shared Object),简称共享对象 文件拓展名为“.so” 动态链接下 一个程序可以被分成若干个文件:程序的主要部分 - 可执行文件 和 程序所依赖的共享对象(一个或多个.so文件),它们都可称作为程序的模块
ELF 文件 动态连接 - 延迟绑定(PLT)
摘要:PLT 全称:Procedure Linkage Table ,直译:过程连接表 由于在动态连接中,程序的模块之间包含了大量的函数引用,所以在程序开始执行前,动态链接会耗费较多的时间用于模块之间函数引用的符号查找以及重定位工作。 但是在程序实际运行时很多函数其实时没有调用到的,这里就时一个优化的点,
LeetCode - 验证二叉搜索树
摘要:给定一个二叉树,判断其是否是一个有效的二叉搜索树。 一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 示例 1: 示例 2:
LeetCode - 二叉树的最大深度
摘要:自己解法,欢迎拍砖 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例:给定二叉树 [3,9,20,null,null,15,7], 返回它的最大深度 3 。 解法: