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

windows堆栈研究以及线程安全

为什么80%的码农都做不了架构师?>>>   hot3.png

由于hook时要线程安全,考虑每条线程的堆栈放对应的数据,于是找了一下网上的说法是默认2M,实际情况却不是这样的。在win10下,使用gcc,vc++,delphi,3种编译器默认编译进行了测试。

真实大小是1A0000-A3000=FD000(1,036,288) 大约1M,这是堆栈满了重新分配后的大小,必须跨越栈底堆栈才会重新分配,我想这部分应该在内核,暂时还没研究。而默认大小实际是5000(20480)也就是20K,想要增加到1M,必须多次跨越栈底,每次增加1000(4096),也就是4K,一直到A3000(注意这里是例子中的偏移,实际情况可能不一样,比如另一个表现为500000-403000=FD000)就可以停止了,之后你就可以使用1M的堆栈了。需要注意的是,直接把esp改过去是行不通的,会造成程序崩溃,必须要多次跨越栈底。

程序里应该这么做:

FD-5=F8

也就是说要做下面这个循环F8次。

mov esp,[dword fs:0x8]

push eax

jmp XMalExe.009176D6

110113_UuO2_1777508.png

说一下栈顶,跨越栈顶没有问题,但是操作系统并不会更改TEB中的数据,所以这种做法无法增加堆栈大小。

 

再说一下线程安全,直接在堆栈中分配的局部变量当然是安全的,但是指针不安全,如果每条线程分配一个对象,这种面向对象也是安全的,全局变量是不安全的,而不同线程使用同一个对象也是不安全的。

 

转载于:https://my.oschina.net/u/1777508/blog/1814685

相关文章:

  • 给nginx生成自签名证书
  • Python之合并PDF文件
  • git 常用命令说明
  • CSS3学习之background-origin和background-clip区别
  • Kuberbetes1.10 集群部署
  • Linux常用基本命令:uniq-去重复
  • ijkplayer视频播放
  • ⽹站部署到阿里服务器及域名配置流程
  • stun服务器搭建(coTurn)
  • 讲清楚之javascript作用域
  • Windows Containers 大冒险: 容器网络
  • Java判断对象类型是否为数组
  • Django学习
  • 性能是.NET Core的一个关键特性
  • itext7 html转pdf实现
  • php的引用
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • 【css3】浏览器内核及其兼容性
  • 【Linux系统编程】快速查找errno错误码信息
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • FineReport中如何实现自动滚屏效果
  • java8-模拟hadoop
  • linux安装openssl、swoole等扩展的具体步骤
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • Webpack 4 学习01(基础配置)
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 从零开始学习部署
  • 二维平面内的碰撞检测【一】
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 简单实现一个textarea自适应高度
  • 如何进阶一名有竞争力的程序员?
  • 微服务核心架构梳理
  • 微信支付JSAPI,实测!终极方案
  • 用element的upload组件实现多图片上传和压缩
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • !!Dom4j 学习笔记
  • #pragma data_seg 共享数据区(转)
  • #Spring-boot高级
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • $jQuery 重写Alert样式方法
  • (4)(4.6) Triducer
  • (java)关于Thread的挂起和恢复
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (原)Matlab的svmtrain和svmclassify
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .NET 使用配置文件
  • .NET/C# 的字符串暂存池
  • .NET开源快速、强大、免费的电子表格组件
  • .NET正则基础之——正则委托
  • .NET中 MVC 工厂模式浅析