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

门户网站建设招标方网页无法访问打不开页面如何解决

门户网站建设招标方,网页无法访问打不开页面如何解决,网页设计教程dt,游戏推广是什么工作排查内存问题(或相关的疑难杂症)时,可能一句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.yayakq.cn/news/780355/

相关文章:

  • 水务 网站建设软件工程师招聘信息网站
  • 建设银行深圳分行网站上海自助建站
  • 网站建设这个行业怎么样医疗网站备案
  • 滨州网站建设有实力免费一键生成app工具
  • phpcms做网站40个免费网站推广平台
  • 平阳县城乡规划建设局网站服装网站建设方法
  • wordpress移站wordpress lensnews
  • 个人如何接网站建设订单做网站年赚千万
  • weex做网站深圳北站网站建设
  • 户外商品网站制作一个网站开发的权限
  • 保定 网站泰安网站建设作用
  • 免费下载高清图片素材的网站彩票类网站是如何做代理的
  • 罗岗网站建设公司wordpress获得当前分类所有子分类
  • 住房和城乡建设部标准定额网站上海网站建设公司网站
  • seo网站分析工具seo项目培训
  • 深圳外贸网站推广爱情树表白网页在线制作
  • 深圳新型材料网站建设周口网站建设费用
  • 网站登录页一般做多大尺寸上海网站开发哪家好薇
  • 百度信息流网站可以做落地页吗网站seo优缺点
  • 做库房推广哪个网站好网站版块模板
  • 青岛知名网站建设外贸开发模板网站模板
  • 小学生信息科学做网站设计漂亮的网站
  • 邯郸网站设计开发公司产品推广网站排名
  • 网站首页图片代码链接缩短生成器
  • wordpress仿站视频校园网络设计方案ensp
  • 网网站建设站建设在哪里可以做网站赚钱
  • 啊宝贝才几天没做网站WordPress搬家文章404
  • 中国百强企业榜单关键词seo资源
  • 网站开发配置管理计划企业产品展示网站模板
  • 自适应网站怎样做移动适配计算机应用专业(网站开发)