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

网站建设日程表图片百度识图以图搜图

网站建设日程表图片,百度识图以图搜图,海外推广电商,新手学做网站pdf下载目录 hook malloc与free出现的问题 builtin_return_address(N) C/CLinux服务器开发/后台架构师【零声教育】-学习视频教程-腾讯课堂 hook malloc与free出现的问题 #define _GNU_SOURCE #include <stdio.h> #include <dlfcn.h> #include <stdlib.h> /****…

目录

hook malloc与free出现的问题

builtin_return_address(N)


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

hook malloc与free出现的问题

#define _GNU_SOURCE
#include <stdio.h>
#include <dlfcn.h>
#include <stdlib.h>
/*****************************hook******************************/
typedef void *(*malloc_t)(size_t);
malloc_t malloc_f;
typedef void (*free_t)(void *);
free_t free_f;
static int init_hook() {malloc_f = dlsym(RTLD_NEXT, "malloc");free_f = dlsym(RTLD_NEXT, "free");
}
void *malloc(size_t size) {printf("In malloc\n");return NULL;
}
void free(void *ptr) {printf("In free\n");
}
/***************************************************************/
int main() {init_hook();void *p1 = malloc(10);void *p2 = malloc(20);free(p1);
}

出现段错误,gdb看一看 

        printf函数底层会调用malloc函数,如果程序陷入死循环,会不停的调用malloc。我们下面就要去破坏这个递归

        让第一次进入函数的部分执行我们的流程,而递归进去的算第二次进入函数,返回即可。

#define _GNU_SOURCE
#include <stdio.h>
#include <dlfcn.h>
#include <stdlib.h>
/*****************************hook******************************/
typedef void *(*malloc_t)(size_t);
int enable_malloc_hook = 1;
malloc_t malloc_f;
typedef void (*free_t)(void *);
int enable_free_hook = 1;
free_t free_f;
static int init_hook() {malloc_f = dlsym(RTLD_NEXT, "malloc");free_f = dlsym(RTLD_NEXT, "free");
}
void *malloc(size_t size) {if (enable_malloc_hook) {enable_malloc_hook = 0;void *p = malloc_f(size);printf("malloc--->ptr:%p size:%zu\n", p, size);enable_malloc_hook = 1;return p;}else {return NULL;}
}
void free(void *ptr) {if (enable_free_hook) {enable_free_hook = 0;printf("free  --->ptr:%p\n", ptr);free_f(ptr);enable_free_hook = 1;}else {return ;}
}
/***************************************************************/
int main() {init_hook();void *p1 = malloc(10);void *p2 = malloc(20);free(p1);
}

builtin_return_address(N)

# 编译器提供的函数,返回第N层调用函数 

1、gcc默认不支持__builtin_return_address(LEVEL)的参数为非0。好像只支持参数为0。

2、__builtin_return_address(0)的含义是,得到当前函数返回地址,即此函数被别的函数调用,然后此函数执行完毕后,返回,所谓返回地址就是那时候的地址。

3、__builtin_return_address(1)的含义是,得到当前函数的调用者的返回地址。注意是调用者的返回地址,而不是函数起始地址。

在__builtin_return_address函数外面套了一层ConvertToVMA。目的是把返回的内存地址转换成VMA地址。

#define _GNU_SOURCE
#include <stdio.h>
#include <dlfcn.h>
#include <stdlib.h>
#include <link.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
/*****************************hook******************************/
//
// Created by 68725 on 2022/8/13.
//
#define _GNU_SOURCE#include <stdio.h>
#include <dlfcn.h>
#include <stdlib.h>
#include <link.h>
#include <unistd.h>typedef void *(*malloc_t)(size_t);int enable_malloc_hook = 1;malloc_t malloc_f;typedef void (*free_t)(void *);int enable_free_hook = 1;free_t free_f;static int init_hook() {malloc_f = dlsym(RTLD_NEXT, "malloc");free_f = dlsym(RTLD_NEXT, "free");
}void *ConvertToVMA(void *addr) {Dl_info info;struct link_map *link_map;dladdr1((void *) addr, &info, (void **) &link_map, RTLD_DL_LINKMAP);return addr - link_map->l_addr;
}void *malloc(size_t size) {if (enable_malloc_hook) {enable_malloc_hook = 0;void *p = malloc_f(size);void *caller = ConvertToVMA(__builtin_return_address(0));printf("[+%p]--->ptr:%p size:%zu\n", caller, p, size);char command[256];Dl_info info;dladdr(malloc, &info);snprintf(command, sizeof(command), "addr2line -f -e %s -a %p > ./mem/%p.mem", info.dli_fname, caller, p);system(command);enable_malloc_hook = 1;return p;}else {return malloc_f(size);}
}void free(void *ptr) {if (enable_free_hook) {enable_free_hook = 0;void *caller = ConvertToVMA(__builtin_return_address(0));printf("[-%p]--->ptr:%p\n", caller, ptr);char buff[128] = {0};sprintf(buff, "./mem/%p.mem", ptr);if (unlink(buff) < 0) {printf("double kill:%p\n",ptr);}free_f(ptr);enable_free_hook = 1;}else {return free_f(ptr);}
}int main() {init_hook();void *p1 = malloc(10);void *p2 = malloc(20);free(p1);
}

http://www.tj-hxxt.cn/news/100916.html

相关文章:

  • 网站前端是做啥的网站关键词优化排名外包
  • wordpress文章如何去除p节点seo薪酬如何
  • 网站建设的原则和目标快手推广网站
  • 义乌网站建设温州seo网站推广
  • 做名片哪个网站可以找网络营销广告案例
  • 微信公众号可以做几个微网站吗谷歌代运营
  • 学校网站报价单网页制作网站制作
  • 网站导航这么做网络推广都有什么方式
  • 金猪云高端网站建设网络新闻发布平台发稿
  • 阿里巴巴国际站入驻费用360优化大师软件
  • 做调查问卷的网站有什么今天头条新闻
  • wordpress上传网站seo管家
  • 周口微网站制作投放广告怎么投放
  • 免费网站建站排行榜网站推广策略有哪些
  • 手机网站建设yuseo批量建站
  • 即买即送的网站有哪些厦门网站外包
  • 做商城网站需要备案吗建网站免费
  • 毕业设计代做淘宝好还是网站好南宁网站推广公司
  • 成品网站和模板建站百度推广的价格表
  • 医院网站建设技术方案ppt爱网站关键词查询工具
  • 网站的网站搭建找营销推广团队
  • 网站模板 酒类郑州粒米seo外包
  • 有哪些网站是做视频的成都全网营销推广
  • 网页设计与网站建设ppt怎么线上推广自己的产品
  • 杭州有哪些网站建设惠州百度seo
  • 个人博客网站的建设结构图网站是否含有seo收录功能
  • 网站建设可以资本化吗seo优化顾问服务
  • 网站建设 语言易观数据
  • wordpress是建站最快的网店
  • 企业所得税税收筹划南宁seo费用服务