链接与装载

我要开发同款
proginn22404421562023年11月21日
144阅读
开发技术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
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论