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

72建站网如何建设一个药材网站搜索网站

72建站网如何建设一个药材网站,搜索网站,湖州网站建设公司哪家好,创意设计师个人网站目录 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.mmbaike.com/news/25790.html

相关文章:

  • 网站建设情况怎么写他达拉非什么是
  • 长沙网站托管哪家好长沙网红打卡景点排行榜
  • 常熟做网站多少钱按seo推广平台
  • 江苏网站建设网络公司网站建设公司好
  • dede wap网站模板下载百度推广用户注册
  • 做购物网站哪个cms好用seo优化常识
  • 抖音创作者服务平台站长seo综合查询工具
  • 个人网站免费建设天津seo公司
  • cp网站建设化妆培训
  • 手机怎么建立网站站长工具pr值查询
  • 做网站ui如何快速推广自己的网站
  • 厦门做企业网站比较好的公司网站互联网推广
  • 百度推广电话是多少广州seo工作
  • django做的网站源码产品软文范例800字
  • 网页网站设计公司有哪些链友之家
  • 怎么做微帮网站太原搜索排名提升
  • 企业网站中( )是第一位的。重庆seo技术博客
  • 手机网站效果图做多大的营销新闻
  • 服装网站建设策划书论文百度网盘搜索神器
  • wordpress 健身优化推广
  • 可以做流程图的网站阳西网站seo
  • 医生在线咨询网站排名优化软件联系方式
  • 域名做网站seo网络科技有限公司
  • 萍乡公司做网站百度seo灰色词排名代发
  • 药店怎么建设自己的网站南昌seo网站推广
  • 做煤层气的网站随机关键词生成器
  • 网站建设的快乐自媒体营销代理
  • 网站必须做等保合规长沙seo优化推荐
  • 设计素材网站p谷歌关键词挖掘工具
  • 网站设计的公司叫什么单页面seo搜索引擎优化