GetModuleHandleW 分析
首先查询MSDN,可以清楚地看到
位于kernel32 dll 里面。
有目标就好办,找到这个dll,然后,开工,进入IDA。
跳啊
就到下面那块了。
遗憾的是。。。显然不是这里阿,实际上下一块调用的地方是kernelbase里面
这里才对,代码非常少。
下面那块是在取进程主模块基址,
就是这里
mov eax, large fs:18h // 取TEB
mov eax, [eax+30h] // 取PEB
mov eax, [eax+8] // 取基址,
这块不管了,其实看伪码也能看出来,如果参数传NULL的话,自然就是取当前进程主模块地址。
进入主菜
这个函数,
这里我们要先记录一下,前面是怎么传参的,
KernelBase.dll
BasepGetModuleHandleExW
开始了
在函数里面,首先判断参数1最低位是否是1
运气真好,如果是1,就不进来,那么我们的调用源可以不进了
参数2,值为2,肯定&4失败,所以这里也不会进
直接走else
首先,前面的& 0x1000 这个位置应该是在判断当前进程的模块里面是否有DLL模块,
这个位的具体含义没有找到官方版,但是从其他地方找到了它的含义,是
RTL_USER_PROCESS_PARAMETERS_PRIVATE_DLL_PATH
判断是否有DLL模块路径,
如果有的话,进入下面的if,先构造DLL 的路径名字,
构造结果是这样的
src = Kernel32.dll
src1 = D:\XXX\Kernel.DLL
src2 = D:\XXX\Test.exe.Local\Kernel.DLL
如果构造正确的话,
调用
一步一步失败了的话,最后直接调用
后续我来分析这个函数
如果这里再失败了,那么就获取Last Status,然后走人。
如果成功了的话,
后面
进入NTDLL里面的这个函数,看名字很像增加DLL的引用计数,后续我来分析这个函数
其实这里吧,前面调用当前函数的时候 dwFlags = 2,那么也就是说,
其实,在前面判断dwFlags & 2 的地方,就已经越过了增加引用计数的功能了。
所以GetModuleHandleW函数,其实是不增加模块引用计数的。
之后继续
其实这里之后就没什么了,
因为前面没有加锁,所以后面也不需要解锁。
释放两块内存,之后转交一下HANDLE,就返回了,完整流程结束
到这里为止,就只有两个函数没有分析了,
1:kernelbase 的 GetModuleHandleForUnicodeString
2:ntdll 的 LdrAddRefDll
今晚先放这吧,改日继续。
其实没啥玩艺,逻辑很简单
GetModuleHandleW 分析的更多相关文章
- alias导致virtualenv异常的分析和解法
title: alias导致virtualenv异常的分析和解法 toc: true comments: true date: 2016-06-27 23:40:56 tags: [OS X, ZSH ...
- 火焰图分析openresty性能瓶颈
注:本文操作基于CentOS 系统 准备工作 用wget从https://sourceware.org/systemtap/ftp/releases/下载最新版的systemtap.tar.gz压缩包 ...
- 一起来玩echarts系列(一)------箱线图的分析与绘制
一.箱线图 Box-plot 箱线图一般被用作显示数据分散情况.具体是计算一组数据的中位数.25%分位数.75%分位数.上边界.下边界,来将数据从大到小排列,直观展示数据整体的分布情况. 大部分正常数 ...
- 应用工具 .NET Portability Analyzer 分析迁移dotnet core
大多数开发人员更喜欢一次性编写好业务逻辑代码,以后再重用这些代码.与构建不同的应用以面向多个平台相比,这种方法更加容易.如果您创建与 .NET Core 兼容的.NET 标准库,那么现在比以往任何时候 ...
- UWP中新加的数据绑定方式x:Bind分析总结
UWP中新加的数据绑定方式x:Bind分析总结 0x00 UWP中的x:Bind 由之前有过WPF开发经验,所以在学习UWP的时候直接省略了XAML.数据绑定等几个看着十分眼熟的主题.学习过程中倒是也 ...
- 查看w3wp进程占用的内存及.NET内存泄露,死锁分析
一 基础知识 在分析之前,先上一张图: 从上面可以看到,这个w3wp进程占用了376M内存,启动了54个线程. 在使用windbg查看之前,看到的进程含有 *32 字样,意思是在64位机器上已32位方 ...
- ZIP压缩算法详细分析及解压实例解释
最近自己实现了一个ZIP压缩数据的解压程序,觉得有必要把ZIP压缩格式进行一下详细总结,数据压缩是一门通信原理和计算机科学都会涉及到的学科,在通信原理中,一般称为信源编码,在计算机科学里,一般称为数据 ...
- ABP源码分析一:整体项目结构及目录
ABP是一套非常优秀的web应用程序架构,适合用来搭建集中式架构的web应用程序. 整个Abp的Infrastructure是以Abp这个package为核心模块(core)+15个模块(module ...
- HashMap与TreeMap源码分析
1. 引言 在红黑树--算法导论(15)中学习了红黑树的原理.本来打算自己来试着实现一下,然而在看了JDK(1.8.0)TreeMap的源码后恍然发现原来它就是利用红黑树实现的(很惭愧学了Ja ...
随机推荐
- C/C++程序员 面试经历总结
最近在找工作,遇到了一些面试题,很惭愧的是很多都没答上来. 现在把一些问题总结一下,算是记录一下面试的经历吧.以后有空简单地回答一下, 同时也欢迎各位同仁解答,共同学习一下吧! 一.嵌入式C语言面 ...
- 在已有QT项目中添加多个UI布局界面
1.在工程中右键->添加新文件,按图选择 2.选择窗口部件 3.创建UI控制类 注意上图红框中命名按实际需要定义,否则后期改动要修改UI文件参数 4.修改UI文件,框1是窗口部件父类,框2是UI ...
- .Net Core身份认证:IdentityServer4实现OAuth 2.0 客户端模式
一.客户端模式介绍 客户端模式(Client Credentials Grant)是指客户端直接向认证服务(Authorization Server)发送认证请求,获取token,进行认证,一般适用于 ...
- UML各种线的含义
内容目录: 从一个示例开始 类之间的关系 时序图 附录:<图说设计模式> 看懂UML类图和时序图 这里不会将UML的各种元素都提到,我只想讲讲类图中各个类之间的关系: 能看懂类图中各个类之 ...
- InnoDB中没有主键是如何运转的
本文章翻译自 https://blog.jcole.us/2013/05/02/how-does-innodb-behave-without-a-primary-key/ 原文作者的创作背景 一个下午 ...
- Alpha版本后的心得体会
Alpha版本后的心得体会 在我们一系列的努力之下,我们团队打造的校园互助式快递代取APP——U-Help的α版本终于能够问世了.尽管这个版本存在着这样那样的问题,但是我们还是对此抱有充足的信心.另一 ...
- VS2013+Opencv3.3配置教程
转载自: https://blog.csdn.net/u014797226/article/details/78283873?locationNum=5&fps=1 参考博文1: 操作环境: ...
- Windows虚拟机共享公司网络给Linux host
前两天写了一个Linux主机通过windows虚拟机上网的随笔,实话说功能有点弱,比如22端口的转发都没有.实际上还有一个更简单且功能更强的共享方法(不需要安装ccproxy). https://ww ...
- 洛谷P3979 遥远的国度 树链剖分+分类讨论
题意:给出一棵树,这棵树每个点有权值,然后有3种操作.操作一:修改树根为rt,操作二:修改u到v路径上点权值为w,操作三:询问以rt为根x子树的最小权值. 解法:如果没有修改树根操作那么这题就是树链剖 ...
- Android 使用android-support-multidex解决Dex超出方法数的限制问题,让你的应用不再爆棚(转)
如有转载,请声明出处: 时之沙: http://blog.csdn.net/t12x3456 (来自时之沙的csdn博客) 随着应用不断迭代,业务线的扩展,应用越来越大(比如集成了各种第三方sd ...