作为库作者,如何优雅地劫持 malloc - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dangyuluo
V2EX    C++

作为库作者,如何优雅地劫持 malloc

  •  1
     
  •   dangyuluo 2021-09-05 22:23:23 +08:00 4594 次点击
    这是一个创建于 1578 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在做一个库,目的是想改变malloc的行为,从 stack 上预先分配好的一大段内存处获取、释放内存。因为想做到对于下游应用基本透明(不需要LD_PRELOAD等操作),所以需要劫持malloc

    我目前的做法是定义了一个jmp结构,存储了一系列的汇编代码,作用为跳转到我自己的fake_malloc处。如果下游程序要求劫持malloc,我就把malloc函数所在内存地址页属性更改为可写,将我的汇编代码覆盖到 glibc 的malloc地址处。

    但是问题是除了我没别人能维护这段代码,搞得怨声载道。请问还有没有别的简单一点的方法来更改malloc的属性?并且能够恢复

    12 条回复    2021-09-06 22:11:12 +08:00
    icyalala
        1
    icyalala  
       2021-09-05 22:30:20 +08:00
    是 glibc 的话,__malloc_hook 不行吗
    dangyuluo
        2
    dangyuluo  
    OP
       2021-09-05 22:54:01 +08:00 via iPhone
    @icyalala __malloc_hook 已经被 deprecated 了,而且在另一个 posix like OS 里不支持
    jpacg
        3
    jpacg  
       2021-09-05 23:16:45 +08:00
    xhook 或 bhook 解决你的需求。
    jjtom5f2
        4
    jjtom5f2  
       2021-09-05 23:53:22 +08:00 via Android
    edimetia3d
        5
    edimetia3d  
       2021-09-06 01:00:18 +08:00
    不用 LD_PRELOAD 的话, 应该只有 hacky 和更 hacky 的做法.

    如果不考虑静态链接, 只是希望 hook 所有的 malloc 动态调用, 你的方法可能是最简单的了.

    否则 intercept 动态调用基本绕不开 ld.so , bhook 和 xhook 没处理 ld.so, 看起来应该也解决不了 dlsym 的问题.
    icyalala
        6
    icyalala  
       2021-09-06 01:35:25 +08:00
    @dangyuluo 想要跨平台,那试试 https://github.com/jmpews/Dobby
    chu1337
        7
    chu1337  
       2021-09-06 01:40:52 +08:00
    .got hijack
    .plt hijack
    yolee599
        8
    yolee599  
       2021-09-06 08:40:46 +08:00 via Android
    自己实现一个 my_malloc,my_free
    delpo
        9
    delpo  
       2021-09-06 08:42:33 +08:00 via Android
    方法还挺多的,但是大部分都是 libc 或者编译器相关的
    比如说弱符号,但是只能用在 glibc 上
    具体可以参考 tcmalloc 库的 libc_override 头文件
    julyclyde
        10
    julyclyde  
       2021-09-06 11:03:03 +08:00   1
    我不觉得“不用 PRELOAD”是什么好事
    kssss
        11
    kssss  
       2021-09-06 14:57:46 +08:00
    hook VirtualAlloc 函数
    dangyuluo
        12
    dangyuluo  
    OP
       2021-09-06 22:11:12 +08:00
    @julyclyde 确实不是什么好事,但是部署在不同的目标硬件上没这么高的灵活性
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2322 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 05:57 PVG 13:57 LAX 21:57 JFK 00:57
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86