当前位置: 首页 > news >正文

wordpress菜单导航图标图片大全快速优化官网

wordpress菜单导航图标图片大全,快速优化官网,自己怎样开网站,免费的分销app目录 hook hook是什么 dlsym()函数 hook的实现步骤 加入hook的demo C/CLinux服务器开发/后台架构师【零声教育】-学习视频教程-腾讯课堂 hook hook可以把系统或第三方库提供的函数,替换成我们写的同名函数。会调用我们实现的函数。 hook是什么 hook提供了两…

目录

hook

hook是什么

dlsym()函数

hook的实现步骤

加入hook的demo


C/C++Linux服务器开发/后台架构师【零声教育】-学习视频教程-腾讯课堂

hook

hook可以把系统或第三方库提供的函数,替换成我们写的同名函数。会调用我们实现的函数。

hook是什么

hook提供了两个接口;1. dlsym()是针对系统的,系统原始的api。2. dlopen()是针对第三方的库。

dlsym()函数

获取共享对象或可执行文件中符号的地址。
函数原型:

描述:

        函数dlsym()接受dlopen()返回的动态加载共享对象的“句柄”以及以空结尾的符号名,并返回该符号加载到内存中的地址。如果在指定对象或加载对象时dlopen()自动加载的任何共享对象中找不到该符号,dlsym()将返回NULL。(dlsym()执行的搜索是通过这些共享对象的依赖关系树进行的广度优先搜索。)

        handle中可以指定两个特殊的伪句柄:

返回值:

成功时,这些函数返回与符号关联的地址。

失败时,返回NULL;可以使用dlerror()诊断错误的原因。

hook的实现步骤

/* ******* ******************hook****************** ******* */
//第一步定义目标函数一样的类型
typedef int (*pthread_mutex_lock_t)(pthread_mutex_t *mutex);
typedef int (*pthread_mutex_unlock_t)(pthread_mutex_t *mutex);pthread_mutex_lock_t pthread_mutex_lock_f;
pthread_mutex_unlock_t pthread_mutex_unlock_f;//第二步实现目标函数名一致
//pthread_mutex_lock()会调用本函数
int pthread_mutex_lock(pthread_mutex_t *mutex) {pthread_t selfid = pthread_self();pthread_mutex_lock_f(mutex);printf("pthread_mutex_lock: %ld, %p\n", selfid, mutex);
} //pthread_mutex_unlock()会调用本函数
int pthread_mutex_unlock(pthread_mutex_t *mutex) {pthread_t selfid = pthread_self();pthread_mutex_unlock_f(mutex);printf("pthread_mutex_unlock: %ld, %p\n", selfid, mutex);
} //第三步dlsym,放到main初始化
void init_hook(void) {pthread_mutex_lock_f = dlsym(RTLD_NEXT, "pthread_mutex_lock");pthread_mutex_unlock_f = dlsym(RTLD_NEXT, "pthread_mutex_unlock");
}

加入hook的demo

//gcc Dead_lock.c -lpthread -ldl
#define _GNU_SOURCE
#include <dlfcn.h>#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>#include <unistd.h>/* ******* ******************hook****************** ******* */
//第一步定义目标函数一样的类型
typedef int (*pthread_mutex_lock_t)(pthread_mutex_t *mutex);
typedef int (*pthread_mutex_unlock_t)(pthread_mutex_t *mutex);pthread_mutex_lock_t pthread_mutex_lock_f;
pthread_mutex_unlock_t pthread_mutex_unlock_f;//第二步实现目标函数名一致
//pthread_mutex_lock()会调用本函数
int pthread_mutex_lock(pthread_mutex_t *mutex) {pthread_t selfid = pthread_self();pthread_mutex_lock_f(mutex);printf("pthread_mutex_lock: %ld, %p\n", selfid, mutex);
} //pthread_mutex_unlock()会调用本函数
int pthread_mutex_unlock(pthread_mutex_t *mutex) {pthread_t selfid = pthread_self();pthread_mutex_unlock_f(mutex);printf("pthread_mutex_unlock: %ld, %p\n", selfid, mutex);
} //第三步dlsym,放到main初始化
void init_hook(void) {pthread_mutex_lock_f = dlsym(RTLD_NEXT, "pthread_mutex_lock");pthread_mutex_unlock_f = dlsym(RTLD_NEXT, "pthread_mutex_unlock");
}//测试代码
pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t mutex2 = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t mutex3 = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t mutex4 = PTHREAD_MUTEX_INITIALIZER;void *thread_funcA(void *arg) {pthread_mutex_lock(&mutex1);sleep(1);pthread_mutex_lock(&mutex2);printf("thread_funcA\n");pthread_mutex_unlock(&mutex2);pthread_mutex_unlock(&mutex1);}void *thread_funcB(void *arg) {pthread_mutex_lock(&mutex2);sleep(1);pthread_mutex_lock(&mutex3);printf("thread_funcB\n");pthread_mutex_unlock(&mutex3);pthread_mutex_unlock(&mutex2);}void *thread_funcC(void *arg) {pthread_mutex_lock(&mutex3);sleep(1);pthread_mutex_lock(&mutex4);printf("thread_funcC\n");pthread_mutex_unlock(&mutex4);pthread_mutex_unlock(&mutex3);
}void *thread_funcD(void *arg) {pthread_mutex_lock(&mutex4);sleep(1);pthread_mutex_lock(&mutex1);printf("thread_funcD\n");pthread_mutex_unlock(&mutex1);pthread_mutex_unlock(&mutex4);}int main() {pthread_t tida, tidb, tidc, tidd;init_hook();pthread_create(&tida, NULL, thread_funcA, NULL);pthread_create(&tidb, NULL, thread_funcB, NULL);pthread_create(&tidc, NULL, thread_funcC, NULL);pthread_create(&tidd, NULL, thread_funcD, NULL);pthread_join(tida, NULL);pthread_join(tidb, NULL);pthread_join(tidc, NULL);pthread_join(tidd, NULL);return 0;
}

http://www.yayakq.cn/news/254950/

相关文章:

  • 甘肃最新消息重庆网站优化公司
  • wordpress域名资源地址seo做什么网站赚钱
  • 做cpa网站厦门做网站维护的公司
  • 无锡中小企业网站制作惠州cms建站系统
  • 网站工作室网页微信文件传输助手
  • 四川住房和城乡建设厅进不去网站奢侈品购物网站排名
  • 学做室内效果图的网站cn域名多少钱一年
  • 学习做网站建设的学校莱芜口镇规划
  • 智联招聘网站怎么做两份简历如何确认建设银行网站不是假的
  • 永康市建设银行网站查询网页编程培训
  • 网站建设后续说明营销型网站如何建设方案
  • 设计制作网站的公司厦门市建设与管理局
  • 做网站使用什么语言好网站原创文章在哪里找
  • 丽水公司网站建设南京seo网络优化公司
  • 医院网站建设招标想学网店运营去哪里学啊
  • 小说网站怎么推广线上app怎么做
  • 旅游网站制作内容wordpress官方正式版
  • 甘肃住房城乡建设厅网站wordpress 注册会员
  • 成都网站seo服务广告传媒公司主要做什么
  • 营销网站开发系统买域名是什么意思
  • 做外贸的网站有何用处网站建设好后能直接打开吗
  • 专业网站制作价格电子商务网站建设的知识点
  • 如何建设和优化一个网站步骤wordpress 搭建平台
  • 网站推广方法的费用做社区网站用什么程序
  • 360企业自助建站中国制造网入驻费用
  • 重庆知道推广网站方法南宁云尚网络有限公司
  • php手机网站建设珠海教育局系统网站
  • 个人或主题网站建设实验报告免费生成app
  • 阿里云centos7做网站可拖拽编程网站开发
  • 个人做网站给手机发短信网站开发的工作内容