免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6826 | 回复: 3
打印 上一主题 下一主题

[C] Linux下,如何实现函数的拦截,或者覆盖,或者说是热补丁 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-04-02 20:23 |只看该作者 |倒序浏览
其实就是:
A调用函数B,
但是通过某种手段将B和C关联起来,
这样当A再调用B的时候,就会进入C

对于单元测试来说,C可以认为是个A的桩函数,在win32下有解决办法,但是Linux下不知道怎么办,根据网上写的一些原理来自己实现,感觉挺难,一看汇编就头大。
有没有解决办法??????

论坛徽章:
2
戌狗
日期:2013-11-06 17:35:36寅虎
日期:2014-10-20 23:12:29
2 [报告]
发表于 2011-04-02 21:30 |只看该作者
比较高深, 不懂

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
3 [报告]
发表于 2011-04-02 21:58 |只看该作者
如果"热补丁"是指cl 的 /hotpatch 与 /functionpadmin 在gcc下的对应物, 可试试4.5新加入的ms_hook_prologue。

http://gcc.gnu.org/onlinedocs/gc ... ion-Attributes.html

ms_hook_prologue

On 32 bit i[34567]86-*-* targets, you can use this function attribute to make gcc generate the "hot-patching" function prologue used in Win32 API functions in Microsoft Windows XP Service Pack 2 and newer.


如果文档描述 —— used in Win32 API functions in Microsoft Windows XP Service Pack 2 and newer. ——非虚, 那应该就会:
1. 在函数入口生成 mov edi, edi 两字节的 "nop"
2. 在函数入口上生成5个以上的 nop指令。

我这里gcc最高只有4.4.x, 没法验证了……


另外, 在x86上, 即使没有ms_hook_prologue,只要有普通的prologue:
push ebp
mov ebp,esp
sub ebp, ??

不算sub的第2个操作数, 刚好5字节, 可替换为一个跳转。
比hotpatch要麻烦很多, 但也是可以做到的。
可参考许多 "API HOOK" 的文章。

论坛徽章:
0
4 [报告]
发表于 2013-09-15 18:59 |只看该作者
本帖最后由 eveson 于 2013-09-15 21:52 编辑

浏览了一下以前的帖子,时间真是过得飞快啊。
这个可以修改运行时代码段的跳转指令实现动态打桩。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP