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

个性化的个人网站简易wordpress 域名米表

个性化的个人网站简易,wordpress 域名米表,福州网站开发风格,网站设计常见问题排查内存问题(或相关的疑难杂症)时,可能一句printf就能让bug出现,或者赶走bug。你可能觉得很神奇,但这并不神奇。 至少我们可以在 Linux-x64 下,通过 malloc hook,来验证当前的编译环境下&…

排查内存问题(或相关的疑难杂症)时,可能一句printf就能让bug出现,或者赶走bug。你可能觉得很神奇,但这并不神奇。

至少我们可以在 Linux-x64 下,通过 malloc hook,来验证当前的编译环境下, printf 确实是调用了 malloc。 而 malloc 底层也不是吃素的, 默认是 glibc 的 ptmalloc 这个内存管理器, 如果本身你的程序把内存控制块写坏了, 继续 malloc 那就容易出现问题, 也就表现为 printf 影响了 bug 的出现。

来看代码。 伸手党可以直接看 godbolt:
https://godbolt.org/z/PPYMW613d
在这里插入图片描述

hook.c

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <dlfcn.h>
#include <malloc.h> // malloc_usable_size
#include <inttypes.h>
#include <pthread.h>// 颜色定义
#define GREEN "\x1b[32m"
#define YELLOW "\x1b[33m"
#define BLUE "\x1b[34m"
#define RESET "\x1b[0m"// 线程局部存储防止递归
static __thread int reentrancy_guard = 0;// 真实函数指针
static void* (*real_malloc)(size_t size) = NULL;
static void (*real_free)(void* ptr) = NULL;
static void* (*real_realloc)(void* ptr, size_t size) = NULL;// 初始化函数,使用 pthread_once 确保只初始化一次
static pthread_once_t init_once = PTHREAD_ONCE_INIT;static void init_real_functions() {//real_malloc = dlsym(RTLD_NEXT, "malloc");real_malloc = (void* (*)(size_t))dlsym(RTLD_NEXT, "malloc");real_free = (void (*)(void*))dlsym(RTLD_NEXT, "free");real_realloc = (void* (*)(void*, size_t))dlsym(RTLD_NEXT, "realloc");if (!real_malloc || !real_free || !real_realloc) {const char *error = "Error in `dlsym`\n";write(STDERR_FILENO, error, sizeof("Error in `dlsym`\n") - 1);_exit(1);}
}// malloc 钩子实现
void* malloc(size_t size) {if (reentrancy_guard) {return real_malloc ? real_malloc(size) : NULL;}pthread_once(&init_once, init_real_functions);reentrancy_guard++;void* ptr = real_malloc(size);reentrancy_guard--;if (ptr) {char buffer[256];int len = snprintf(buffer, sizeof(buffer), BLUE "malloc %ld %p\n" RESET, size, ptr);write(STDERR_FILENO, buffer, len);}return ptr;
}// free 钩子实现
void free(void* ptr) {if (reentrancy_guard) {if (real_free) real_free(ptr);return;}pthread_once(&init_once, init_real_functions);reentrancy_guard++;if (ptr) {size_t size = malloc_usable_size(ptr);char buffer[256];int len = snprintf(buffer, sizeof(buffer), GREEN "free %ld %p\n" RESET, size, ptr);write(STDERR_FILENO, buffer, len);}real_free(ptr);reentrancy_guard--;
}// realloc 钩子实现
void* realloc(void* ptr, size_t size) {if (reentrancy_guard) {return real_realloc ? real_realloc(ptr, size) : NULL;}pthread_once(&init_once, init_real_functions);reentrancy_guard++;void* new_ptr = real_realloc(ptr, size);reentrancy_guard--;if (new_ptr) {char buffer[256];int len = snprintf(buffer, sizeof(buffer), YELLOW "realloc %ld %p %p\n" RESET, size, ptr, new_ptr);write(STDERR_FILENO, buffer, len);}return new_ptr;
}

编译:

gcc -shared -fPIC hook4.c -o hook.so -ldl -O2

使用

int main()
{printf("Hello, World");return 0;
}
g++ main.cpp
LD_PRELOAD=./hook.so ./a.out

输出内容:

malloc 4096 0x3a842b0
Hello, World
http://www.15wanjia.com/news/162360.html

相关文章:

  • 做网站的分析报告案例桂林小程序开发定制
  • icp是网站备案视频网站费用
  • 西宁做网站莱芜在线电话
  • 做网站怎么返回首页网站设计网络推广关键词
  • 电信网站备案系统如何管理网站后台
  • 网站建设填空题深圳市小程序科技有限公司
  • 域名命名网站湖南网站推广
  • 成都做网站wordpress审计
  • 山西网站建设运营公司网站建设回访
  • 网站美工设计流程网站免费建站pixiv app
  • 湛江做网站需要什么网站怎么做移动图片大全
  • 论述农产品电商网站建设cho菌主题wordpress
  • 小说网站开发需求分析做网站前端有前途么
  • 提高网站收录河南科兴建设有限公司网站
  • 深圳网站专业建设公司上海sem
  • 网站怎么做优化步骤传奇手游最新下载
  • 外包服务费税率上海网络公司seo
  • 有个网站做彩盒的silverlight做的网站
  • 网站宣传与推广的指导思想阿里云域名怎样做网站
  • 网站建设公司销售wordpress 重装教程视频教程
  • WordPress开VPN访问快seo运营是什么
  • 新手学网站建设解疑与技巧1200例wordpress实现文章目录
  • 跳转到手机网站网站备案技巧
  • 新网网站品牌推广软文200字
  • 网站建设 开发人一丶一一人一一windows 2003做网站
  • 做网站市场报价步登顶网站的pv是什么
  • 网站的软件帮别人做ppt挣钱的网站
  • 做服装外单的网站南京好的网站设计
  • 江苏手机网站建设公司跟网站做流量
  • 免费网站免费无遮挡网站是一个链接的页面结合吗