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

咸宁做网站百度高级搜索页面

咸宁做网站,百度高级搜索页面,国家企业信用信息公示系统平台,搭建网站赚钱排查内存问题(或相关的疑难杂症)时,可能一句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.yidumall.com/news/46991.html

相关文章:

  • 跨境b2c电商平台有哪些安卓优化大师app下载
  • 做农产品的网站seo推广公司排名
  • 没有网站怎么做百度竞价重庆seo和网络推广
  • 做b2b网站公司宣传推广方案
  • 做产品展示网站武汉软件测试培训机构排名
  • 手机兼职免费加入不需要任何费用广州seo教程
  • 网页设计网站设计欣赏seo入门教程seo入门
  • 网站开发 周期国内真正的永久免费建站
  • 重庆长寿网站建设重庆seo报价
  • 政务中心网站建设方案上海排名优化推广工具
  • ebay网站做外贸优缺点北京seo优化
  • 怎样建一个免费网站长沙百度开户
  • php做网站的技术难点整合营销传播策略
  • 响应式网站建设案例整站seo技术
  • 豆瓣网站模板百度知道客服电话
  • 微信订阅号做微网站关键词搜索引擎优化推广
  • 做网站和编程合肥seo
  • 用nat123做自己的网站电脑学校培训
  • 上海高端定制网站公司搜索引擎优化叫什么
  • 网站备案信息怎么做seo关键词排名怎么优化
  • 公司如何建站广州最新政策
  • 乌鲁木齐哪里做网站百度百度一下
  • 新手学做网站 pdf互联网推广有哪些方式
  • 个人网站备案名称要求网站统计器
  • 公司网站怎么做分录宁波seo外包引流推广
  • 荆门市网站建设seo com
  • 视频教做家常菜的网站长沙网站优化指导
  • 北京自考网址seo单页快速排名
  • 做黄色网站要学些什么网络营销的发展前景
  • 程序做网站好还是app好怎样做公司网站推广