在前文《Apache Hook机制解析(上)——钩子机制的实现》和《Apache Hook机制解析(中)——细节讨论》的基础上,我们对Apache的钩子机制已经有了较多的了解,下面的代码实战演示了一个日志钩子的声明、定义和使用,在VC6.0上编译测试通过,需要使用APR库(libapr和libaprutils)。 1. hookLog.h——声明一个名为log的钩子 #ifndef __HOOK_LOG_H__
#define __HOOK_LOG_H__

#ifdef __cplusplus
extern "C" {
#endif

#include "apr_hooks.h"

#define MY_DECLARE(type)    type

APR_DECLARE_EXTERNAL_HOOK(my, MY, int, log, (const char *szText))

#ifdef __cplusplus
}
#endif 2. hookLog.c——定义一个名为log的钩子 #include "hookLog.h"

//定义名为log的钩子结构变量
APR_HOOK_STRUCT(
    APR_HOOK_LINK(log)
)

//定义log相关的钩子实现,这里将0作为OK,-1作为DECLINE
APR_IMPLEMENT_EXTERNAL_HOOK_RUN_ALL(my, MY, int, log, (const char *szText), (szText), 0, -1) 3.    test.c——挂载Hook并触发 #include "hookLog.h"
#include "apr_pools.h"

/*    文件日志实现    */
static int fileLog(const char *szText)
{
    FILE *fp = NULL;

fp = fopen("filelog.txt", "wt");
    if (fp) {
        fseek(fp, 0, SEEK_END);
        fprintf(fp, "%s/n", szText);
        fclose(fp);
    }

return 0;
}

/*    控制台日志实现    */
static int consoleLog(const char *szText)
{
    printf("%s/n", szText);

return 0;
}
int main()
{
    //初始化apr库以及Hook所需的全局内存池
    apr_initialize();
    apr_pool_create(&apr_hook_global_pool, NULL);

//挂载Hook
    my_hook_log(consoleLog, NULL, NULL, APR_HOOK_MIDDLE);
    my_hook_log(fileLog, NULL, NULL, APR_HOOK_MIDDLE);

//对Hook进行排序     apr_sort_all_hooks();     //触发Hook,此调用将引发两个已挂载的钩子——fileLog和consoleLog
    my_run_log("Hello World!");

//销毁内存池
    apr_pool_destroy(apr_hook_global_pool);

return 0;
}

Apache Hook机制解析(下)——实战:在自己的代码中使用Apache的钩子相关推荐

  1. Apache Hook机制解析(中)——细节讨论

    本文在上文<Apache Hook机制解析(上)--钩子机制的实现>的基础上,对钩子机制的细节了补充分析. 1.    静态变量_hooks 这个变量由宏APR_HOOK_STRUCT所定 ...

  2. Apache Hook机制解析(上)——钩子机制的实现

    Apache中大量使用了Hook机制,使得第三方开发Module可以扩展Apache服务器的默认处理. Apache Hook功能可以简述如下: 1.    程序主框架根据名称声明和定义Hook 2. ...

  3. 一文读懂 Apache Pulsar详细解析和实战运用

    Pulsar 介绍 Apache Pulsar 作为 Apache 软件基金会顶级项目,是下一代云原生分布式消息流平台,集消息.存储.轻量化函数计算为一体,采用计算与存储分离架构设计,支持多租户.持久 ...

  4. Apache Tiles 学习(二)、Java Web应用中使用Apache Tiles

    摘要: 在java web项目中使用Apache tiles. 在Java Web项目中使用Apache Tiles Tiles一直是一个web应用程序包,通常结合strut一起使用.Apache T ...

  5. Apache运行机制剖析

    Apache运行机制剖析: 1. B/S交互过程 浏览器(Browser)和服务器(Web Server)的交互过程: 1.  浏览器向服务器发出HTTP请求(Request). 2.  服务器收到浏 ...

  6. vs.php中使用apache或IIS7进行外部调试

    vs.php中使用apache或IIS7进行外部调试 1.解决vs.php2.7在Windows7下调试apache出错的问题 vs.php默认使用内部调试模式,由于vs.php2.7默认自带的内部调 ...

  7. WordPress 实战:在wordpress文章中加入分享到微博及社交网站的按钮(代码实现,非插件)

    随着现在微博和一些社交网站的流行,为了便于网站中文章的分享和转载,很多站长在自己的网站中都加入了分享按钮,轻轻一点,文章自动转发到你想要发布的网站上,确实很方便.我的妍熙饭yanxifan.com近日 ...

  8. PostgreSQL下如何修改用户权限的介绍以及hook机制对超级用户的权限修改

    2019独角兽企业重金招聘Python工程师标准>>> 要想修改PG的用户权限,那么首先要对PG权限控制做一下了解: PG的权限控制是针对到各个对象的.大家可以看一下,所有系统表(p ...

  9. Android插件化原理解析——Hook机制之Binder Hook

    Android系统通过Binder机制给应用程序提供了一系列的系统服务,诸如ActivityManagerService,ClipboardManager, AudioManager等:这些广泛存在系 ...

最新文章

  1. Python - Sublime Text 3 控制台不能输出中文的解决方法
  2. python是不是特别垃圾-python为啥比较流行(垃圾桶)
  3. 启发式算法简谈(一)
  4. 如何获取微信API的Access Token
  5. 区域风云企业之大立-DVR产品的新技术应用
  6. Loj #2324. 「清华集训 2017」小 Y 和二叉树
  7. 索引sql server_SQL Server索引设计基础和准则
  8. Android移动应用基础教程【服务】
  9. 拓端tecdat|python中的copula:Frank、Clayton和Gumbel copula模型估计与可视化
  10. linux puppy 安装软件,小芭比linux下载
  11. 有哪些好的科研工具软件?
  12. 康师傅红烧牛肉面:守护平凡英雄,成就烟火人生
  13. 明翰英语教学系列之语料篇V0.4(持续更新)
  14. windows10的etc路径下没有hosts文件
  15. php中怎么设计出生日期,php – 将出生日期添加到数据库
  16. office二级证书和mysql_二级考office还是access ??在线等 挺急的 (内附合格证书领取通知)...
  17. 【图像增强】基于matlab萤火虫算法图像对比度增强【含Matlab源码 2142期】
  18. java毕业设计SEOUL设计师品牌代购商城Mybatis+系统+数据库+调试部署
  19. profit from/prove to/provide with等动词词组
  20. 最全解释:Linux操作系统下的软件安装与管理详解(源码安装、rpm/dpkg、yum/apt-get安装)

热门文章

  1. python恶搞-python—做一个恶搞程序
  2. python最新版下载教程-各种版本的Python下载安装教程
  3. python用途与前景-Python就业前景如何?三大就业岗位分享
  4. python介绍和用途-python应用领域介绍
  5. python编程培训-马哥教育官网-专业Linux培训班,Python培训机构
  6. python爬虫实例-Python爬虫原理与python爬虫实例大全
  7. UVa12326 Yummy Triangular Pizza(dfs)
  8. 用脚本批量执行redis命令
  9. OAuth2.0认证和授权原理
  10. 值得mark的11个开源机器学习项目 .