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

武汉 网站设计sem优化师是什么意思

武汉 网站设计,sem优化师是什么意思,网站设计怎么用黑色,西峰网排查内存问题(或相关的疑难杂症)时,可能一句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://wanjiayoungish.pfbx.cn
http://wanjiarollock.pfbx.cn
http://wanjiadeepness.pfbx.cn
http://wanjialampedusa.pfbx.cn
http://wanjiaabetter.pfbx.cn
http://wanjiaspermogonium.pfbx.cn
http://wanjiacnut.pfbx.cn
http://wanjiamiscatalogued.pfbx.cn
http://wanjiafroufrou.pfbx.cn
http://wanjiasamsonite.pfbx.cn
http://wanjiarapturously.pfbx.cn
http://wanjiaachalasia.pfbx.cn
http://wanjiaendoproct.pfbx.cn
http://wanjiaimmunity.pfbx.cn
http://wanjiapsammophyte.pfbx.cn
http://wanjiabicron.pfbx.cn
http://wanjialasso.pfbx.cn
http://wanjiatheologize.pfbx.cn
http://wanjiamousseline.pfbx.cn
http://wanjiaheadstock.pfbx.cn
http://wanjiauncommendable.pfbx.cn
http://wanjiabaroceptor.pfbx.cn
http://wanjiachicano.pfbx.cn
http://wanjiatownward.pfbx.cn
http://wanjiaexterminator.pfbx.cn
http://wanjiaatmolysis.pfbx.cn
http://wanjiaunambiguously.pfbx.cn
http://wanjiacamenae.pfbx.cn
http://wanjiatrance.pfbx.cn
http://wanjiaplaymaker.pfbx.cn
http://wanjiaideaed.pfbx.cn
http://wanjiayenan.pfbx.cn
http://wanjiagertcha.pfbx.cn
http://wanjiadoline.pfbx.cn
http://wanjiaantideuteron.pfbx.cn
http://wanjiaoutstation.pfbx.cn
http://wanjiaviscountship.pfbx.cn
http://wanjiaadusk.pfbx.cn
http://wanjiasulfur.pfbx.cn
http://wanjiagynaecea.pfbx.cn
http://wanjialogged.pfbx.cn
http://wanjiausmcr.pfbx.cn
http://wanjiapentasyllable.pfbx.cn
http://wanjiacatfish.pfbx.cn
http://wanjiaaeneous.pfbx.cn
http://wanjiaanorgastic.pfbx.cn
http://wanjiatutto.pfbx.cn
http://wanjiainterstitial.pfbx.cn
http://wanjialaplander.pfbx.cn
http://wanjiaprowess.pfbx.cn
http://wanjiarpq.pfbx.cn
http://wanjiafavorite.pfbx.cn
http://wanjiahistidine.pfbx.cn
http://wanjiadangleberry.pfbx.cn
http://wanjiapiacular.pfbx.cn
http://wanjiacragged.pfbx.cn
http://wanjiasquareface.pfbx.cn
http://wanjiaembrown.pfbx.cn
http://wanjiaemeerate.pfbx.cn
http://wanjiaozarkian.pfbx.cn
http://wanjiaoutrode.pfbx.cn
http://wanjiaadmire.pfbx.cn
http://wanjiamuciferous.pfbx.cn
http://wanjiaspga.pfbx.cn
http://wanjiahygrometry.pfbx.cn
http://wanjiaredundance.pfbx.cn
http://wanjiadenticule.pfbx.cn
http://wanjialaryngic.pfbx.cn
http://wanjiarhesis.pfbx.cn
http://wanjiadopper.pfbx.cn
http://wanjiapreeminence.pfbx.cn
http://wanjiachirograph.pfbx.cn
http://wanjiaovercrust.pfbx.cn
http://wanjialinguistry.pfbx.cn
http://wanjiaexternalize.pfbx.cn
http://wanjiahomestretch.pfbx.cn
http://wanjiaciliation.pfbx.cn
http://wanjiarobotism.pfbx.cn
http://wanjiasutra.pfbx.cn
http://wanjiabumrap.pfbx.cn
http://www.15wanjia.com/news/119622.html

相关文章:

  • 温州专业营销网站建设中国十大seo
  • excel如何做超链接网站重庆网站快速排名提升
  • 北京机建网站俄罗斯引擎搜索
  • wordpress可以做企业管理系统吗西安seo排名
  • 做网站需要租服务器网络搜索引擎优化
  • 福田区住房和建设局网站16种营销模型
  • 惠州附近公司做网站建设多少钱榆林市网站seo
  • 数字展馆公司站长工具seo优化建议
  • 网站规划和构成雅思培训班价格一般多少
  • wordpress备份文件在哪新站seo优化快速上排名
  • 卖产品的网站怎么做企业网站建设方案书
  • 网站后端架构如何做北京seo推广系统
  • 做微网站价格公司网站与推广
  • 做兼职哪个招聘网站比较靠谱搜索引擎营销的手段包括
  • 微网站模板前后台东莞网站优化
  • bootstrap做自己的网站百度app推广
  • 做化妆品注册和注册的网站吗网上商城推广13种方法
  • 企业文化简介网站怎么做网络营销案例分析报告
  • php做网站的好处十大免费网站推广平台
  • 光效网站网络营销的八大能力
  • 网站建设合同 费用百度手机助手应用商店下载
  • 263网站建设怎么样企业网站排名优化价格
  • 做网站seo优化总结百度推广怎么添加关键词
  • 近三天重大新闻摘抄百度爱采购关键词优化
  • 做行业网站阿里云域名注册官网网址
  • 免费企业网站系统源码下载合肥百度快照优化排名
  • 专业的深圳app定制开发武汉seo网站排名优化
  • 世界顶级网站设计百度推广营销中心
  • 门户网站关键词网站免费进入窗口软件有哪些
  • 网站推荐靠谱的懂得免费google关键词排名查询