链接与装载

我要开发同款
proginn22404421562023年11月21日
44阅读
开发技术C/C++c++
所属分类编译器

作品详情

链接与装载(HOOK 库) PLT hook 的流程:- 读取进程的 maps 信息,获取到 ELF 文件在进程的 maps 中的内存基地址- 验证 ELF 文件的头信息- 从 PHT(`program header table`) 中找到类型为 `PT_LOAD` 且 offset 为 `0` 的 segment。计算 ELF 基地址。- 从 PHT 中找到类型为 `PT_DYNAMIC` 的 segment,从中获取到 `.dynamic` section,从 `.dynamic` section中获取其他各项 section 对应的内存地址。- 在 `.dynstr` section 中找到需要 hook 的 symbol 对应的 index 值。- 遍历所有的 `.relxxx` section(重定位 section),查找 symbol index 和 symbol type 都匹配的项,对于这项重定位项,执行 hook 操作。- hook 的流程如下: - 读取 maps,确认当前 hook 地址的内存访问权限 - 如果权限不是可读可写,则使用 `mprotect` 修改访问权限为可读可写 - 将 hook 地址的值替换为新的值 - 如果之前用 `mprotect` 修改过内存访问权限,现在还原到之前的权限 - 清除 hook 地址所在内存页的处理器指令缓存
查看全文
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论