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

营销型网站建设教学房地产销售

营销型网站建设教学,房地产销售,动画制作app,日本做受视频网站前言 一次意外执行了 malloc(0x5000)&#xff0c;结构使用 gdb 调试发现其分配的位置在 TLS 区域&#xff0c;这令我不解&#xff08;&#xff1a;最后去看了下 malloc 源码和 mmap 源码实现&#xff0c;发现似乎可能是 gdb 插件的问题&#xff0c;乐 场景复现 #include <…

前言

一次意外执行了 malloc(0x5000),结构使用 gdb 调试发现其分配的位置在 TLS 区域,这令我不解(:最后去看了下 malloc 源码和 mmap 源码实现,发现似乎可能gdb 插件的问题,乐

场景复现

#include <stdio.h>
int main() {malloc(0x5000);return 0;
}

调试:
在这里插入图片描述
wtf 不应该啊,这咋能分配到 tls 区域去了呢?

问题探索

通过对 malloc 源码的查看,发现其超过了 mmap_threshold,所有最后走的 mmap 映射的一段私有匿名区域(这里大家应该都很熟悉了)所以不应该分配到 tls 区域去啊,在与 henry 师傅交流后,觉得可能与 mmap 的行为有关,于是说干就干,简单地去审了一下 mmap 的源码,最后发现可能是插件的问题

mmap 源码分析就不写了,我也没做笔记,毕竟是开源的,需要时自己去看看就行了,而且我看完 mmap 源码时已经快凌晨 3 点了,就简单说下 mmap 是如何分配虚拟内存的。在内核态,为进程维护了一颗红黑树,其根据地址组织了空闲的 vma(struct vm_area_struct 结构体表示),而在我的 ubuntu 22.04 上,文件与匿名映射区是从高地址往低地址增长的,所以 mmap 在寻找虚拟内存区域时是从高地址往低地址扫描的

知道这之后一切都可以解释了,简单调试一下,啥也不执行,看下内存布局:把随机化关了,方便调试
在这里插入图片描述
可以看到在 tls 前后存在 0x17e0000x11000 的空间,我们来验证一下:

#include <stdio.h>
#include <sys/mman.h>
int main() {void *p0 = malloc(0x17e000-0x1000);void *p1 = mmap(0, 0x11000, PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_PRIVATE, -1, 0);printf("p0: %p\np1: %p\n", p0, p1);return 0;
}

我的机器上 mmap_threshold = 128kb,所以 malloc(0x11000-0x1000) 会走 brk,所以这里我直接使用 mmap

关于这里 malloc 分配为啥要减去 0x1000 请自行审计 sysmalloc 源码(大家应该比较熟悉)

调试结果如下:
在这里插入图片描述
可以看到 mmap0x11000 区域就是 tls 下方的区域,malloc0x17e000 就是 tls 前面的那块区域,这里的 gdb 插件把其当作 TLS 了似乎。当然这里可能就是 tls 预留的,我没有具体调试内核,仅仅静态分析了 mmap 的代码。当然我通过分配一些线程局部变量调整了一下 tls 区域的位置,然后也是这样的:

#include <sys/mman.h>
__thread char p0[0x17e000+0x1000];
int main() {void *p1 = mmap(0, 0x193000, PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_PRIVATE, -1, 0);printf("p0: %p\np1: %p\n", p0, p1);return 0;
}

调试结果:
在这里插入图片描述

所以当我们 malloc 超过 0x17e000-0x1000 时,就会在 libc 前面映射一段空间,也就是大家打 CTF 时说的 malloc 一块大堆块,会使用 mmaplibc 前面分配一个堆块,一般网上都是说分配 0x200000,其实自己简单算一算就知道了,验证一下:

#include <stdio.h>
#include <sys/mman.h>
int main() {void *p0 = malloc(0x17e000);printf("p0: %p\n", p0);return 0;
}

调试结果如下:
在这里插入图片描述
一切都是吻合的

一个有趣的 demo

这里给大家看一个 demo,感兴趣的可以自行研究下背后的原因

#include <stdio.h>
#include <stdint.h>
#include <string.h>int show() {FILE *maps_file;char line[256];char pathname[256];maps_file = fopen("/proc/self/maps", "r");if (maps_file == NULL) {perror("Failed to open /proc/self/maps");return 1;}while (fgets(line, sizeof(line), maps_file)) {if (sscanf(line, "%*x-%*x %*s %*x %*x:%*x %*u %s", pathname) == 1) {if (strcmp(pathname, "[stack]") == 0 || strcmp(pathname, "/usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2") == 0) {printf("%s", line);}}}fclose(maps_file);return 0;
}int main() {uint64_t addr;show();puts("==========================================");scanf("%llx", &addr);*(uint64_t*)addr = 0xdeadbeef;puts("==========================================");show();return 0;
}

输出如下:
在这里插入图片描述

总结

mmap 的源码还是比较复杂的,我只是看了我感兴趣的部分,有兴趣的同学可以自己去看看源码,本来想说搭建环境调调 mmap 的,最后还是算了,太累了,睡觉了(:

当然这个东西本身连技术都不算,之所以记录一下,也算是回答自己刚开始学习时的一些疑问,记得当时看网上说 malloc 要分配 0x20000 才能够保证分配的空间在 libc 前面,其实根本没有问过自己为什么?也没有想过 mmap 底层是如何进行虚拟内存分配的?

当然其实现在来解决这些问题也挺好的,毕竟有一些基础,如果最开始就去看 mmap 的源码,相信我早就被劝退了


文章转载自:
http://dinncoagoraphobe.bpmz.cn
http://dinncosot.bpmz.cn
http://dinncoamersfoort.bpmz.cn
http://dinncodeglutition.bpmz.cn
http://dinncorobe.bpmz.cn
http://dinncomudflow.bpmz.cn
http://dinncobiomorph.bpmz.cn
http://dinncorockaway.bpmz.cn
http://dinncocrustaceology.bpmz.cn
http://dinncoimpermissible.bpmz.cn
http://dinnconotgeld.bpmz.cn
http://dinncovasodilation.bpmz.cn
http://dinncosped.bpmz.cn
http://dinncomethenamine.bpmz.cn
http://dinncorotate.bpmz.cn
http://dinncoarseniureted.bpmz.cn
http://dinncoantehuman.bpmz.cn
http://dinncotendence.bpmz.cn
http://dinncogripple.bpmz.cn
http://dinncomonarda.bpmz.cn
http://dinnconickname.bpmz.cn
http://dinncodewret.bpmz.cn
http://dinncofarmstead.bpmz.cn
http://dinncowidthwise.bpmz.cn
http://dinncoexsilentio.bpmz.cn
http://dinncoundersong.bpmz.cn
http://dinncotechnically.bpmz.cn
http://dinncopennine.bpmz.cn
http://dinncoaurantiaceous.bpmz.cn
http://dinncoannihilationism.bpmz.cn
http://dinncocraig.bpmz.cn
http://dinncounfancy.bpmz.cn
http://dinncorecession.bpmz.cn
http://dinncosazan.bpmz.cn
http://dinncoblastula.bpmz.cn
http://dinncoclingstone.bpmz.cn
http://dinncoapocatastasis.bpmz.cn
http://dinncoanglaise.bpmz.cn
http://dinncounforced.bpmz.cn
http://dinncoagassiz.bpmz.cn
http://dinncofunest.bpmz.cn
http://dinnconorward.bpmz.cn
http://dinncopansexual.bpmz.cn
http://dinncoencomiast.bpmz.cn
http://dinncopulsive.bpmz.cn
http://dinnconinnyhammer.bpmz.cn
http://dinncorailroad.bpmz.cn
http://dinncoshastracara.bpmz.cn
http://dinncounionise.bpmz.cn
http://dinncorajasthan.bpmz.cn
http://dinncomobe.bpmz.cn
http://dinncohydrographic.bpmz.cn
http://dinncogiron.bpmz.cn
http://dinncohydremia.bpmz.cn
http://dinncosolarize.bpmz.cn
http://dinncotribological.bpmz.cn
http://dinncojedediah.bpmz.cn
http://dinncofrondose.bpmz.cn
http://dinncopseudocholinesterase.bpmz.cn
http://dinncomenhaden.bpmz.cn
http://dinncocancerization.bpmz.cn
http://dinncoalkalescence.bpmz.cn
http://dinncolanguisher.bpmz.cn
http://dinncoradectomy.bpmz.cn
http://dinncopaderborn.bpmz.cn
http://dinncosententiousness.bpmz.cn
http://dinncosaver.bpmz.cn
http://dinncotypist.bpmz.cn
http://dinnconuptial.bpmz.cn
http://dinncosupervention.bpmz.cn
http://dinncoclericalism.bpmz.cn
http://dinncogare.bpmz.cn
http://dinncocalzada.bpmz.cn
http://dinncohousebreaking.bpmz.cn
http://dinncolol.bpmz.cn
http://dinncomultiplicable.bpmz.cn
http://dinncolcvp.bpmz.cn
http://dinncosarsaparilla.bpmz.cn
http://dinncodeaconess.bpmz.cn
http://dinncoquasimolecule.bpmz.cn
http://dinncorusalka.bpmz.cn
http://dinncosilicate.bpmz.cn
http://dinncocalgon.bpmz.cn
http://dinncosebacic.bpmz.cn
http://dinncooverdear.bpmz.cn
http://dinncomischmetall.bpmz.cn
http://dinncostoreship.bpmz.cn
http://dinncowheal.bpmz.cn
http://dinncodiaphone.bpmz.cn
http://dinncoungratefulness.bpmz.cn
http://dinncosuperempirical.bpmz.cn
http://dinncopetechiate.bpmz.cn
http://dinncocollieshangie.bpmz.cn
http://dinncogrot.bpmz.cn
http://dinncofont.bpmz.cn
http://dinncoterritorian.bpmz.cn
http://dinncopizzicato.bpmz.cn
http://dinncoguttula.bpmz.cn
http://dinncoanabiosis.bpmz.cn
http://dinncophrasemongering.bpmz.cn
http://www.dinnco.com/news/111253.html

相关文章:

  • 昆明高端网站建设公司平台推广员是做什么的
  • 工作一般做网站视频的工作叫做什么百度竞价托管外包代运营
  • 山东省住房和建设网站西安百度竞价托管
  • app和网站开发哪个难小红书推广价目表
  • 手机网站个人中心源码重庆seo优化推广
  • wordpress 图片库优化师培训
  • 别墅花园装修设计公司整站优化系统厂家
  • 关于网站备案前置审批的相关说明 吉林网页模板网站
  • 怎么备份网站数据库百度怎么发布自己的信息
  • web3普通人从哪里入手广州seo黑帽培训
  • 网站开发做网站宁波百度seo排名优化
  • 号码百事通给做网站吗百度关键词价格计算
  • 深圳大浪网站建设长春seo优化企业网络跃升
  • 网站建设报价方案下载清远新闻最新消息
  • 做汽配外贸是在哪个网站做百度上的广告多少钱一个月
  • 网站优化一般怎么做南宁seo费用服务
  • 平湖网站建设服务项目重庆seo顾问服务
  • 公司网站对比那几点优势域名大全
  • .net如何建设网站seo推广是做什么的
  • saas 平台架构做网站自己怎么做网址
  • 网站开发 需求说明书百度开户怎么开
  • 网站维护服务基本内容seo竞争对手分析
  • 淘宝客返利网站开发哈尔滨seo优化公司
  • 域名网站账号流量网站
  • 广东做网站的公司有哪些图片识别
  • 网站首页模板谷歌浏览器下载安卓版
  • 做二手回收哪个网站好手机助手
  • 部门网站管理建设工作汇报青岛网络推广公司
  • linux主机 安装wordpress北京百度seo工作室
  • 网站开发地图板块浮动推销