170722 逆向-DLL基础
来源:互联网 发布:电视机网络电视怎么调 编辑:程序博客网 时间:2024/06/15 17:07
1625-5 王子昂 总结《2017年7月22日》 【连续第293天总结】
A. DLL基础
B.
DLL工作方式
构建DLL
头文件,其中包含待导出函数的原型、结构和符号的声明
C/C++源文件,其中包含待导出函数的实现和变量
编译器为每个C/C++源文件生成.obj文件
连接器将每个.obj模块合并,从而生成DLL
如果至少导出了一个函数/变量,那么连接器会同时生成.lib文件
构建EXE
头文件,其中包含待导出函数的原型、结构和符号的声明
C/C++源文件,其中包含待导出函数的实现和变量
编译器为每个C/C++源文件生成.obj文件
链接器将每个.obj模块合并,并使用.lib文件来解析对导入的函数/变量的引用,从而生成.exe(包含一个导入表,其中列出了必需的DLL和导入的符号)
运行应用程序
加载程序为.exe创建地址空间
加载程序将必需的DLL载入到地址空间中
进程的主线程开始执行,应用程序开始运行
构建DLL模块
在创建DLL的时候,事实上是创建了一组可供可执行模块(或其他DLL)调用的函数。
一个DLL可以导出变量、函数或C++类来供其他模块使用,但在实际开发中应避免导出变量和C++类
创建DLL时需要一个头文件包含想导出的变量和函数原型,并且定义用到的符号和数据结构;这个头文件需要分发给调用者
运行可执行模块
启动可执行模块时,先创建虚拟地址空间,接着把可执行模块映射到地址空间中,再检查可执行模块的导入段来对DLL定位并把它们映射到地址空间中
由于导入段只包含DLL的名称而没有路径,因此需要按照下列顺序搜索:
包含可执行文件的目录
Windows系统目录,通过GetSystemDirectory得到
16位的系统目录,即Windows/System
Windows目录,通过GetWindowsDirectory得到
进程的当前目录
PATH环境变量中所列出的目录
注意对应用程序当前目录的搜索位于Windows目录之后,这个改变从XP SP2开始,为了防止夹在程序在应用程序的当前目录中找到伪造的系统DLL并将它们载入。注册表中有一个值可以改变搜索顺序。
DLL被加载入地址空间以后,加载程序还会检查每个DLL的导入段,从而继续将额外的DLL映射进入。
C. 明日计划
逆向
- 170722 逆向-DLL基础
- 逆向基础
- iphone逆向专题--逆向基础
- [Android逆向]-Android逆向基础
- 171016 逆向-DLL注入基础知识
- 逆向技术分析基础
- 逆向破解的基础
- c语言逆向基础
- 逆向基础13:联合体
- 逆向基础10:数组
- 逆向基础笔记
- 逆向汇编基础
- Android逆向基础笔记—初识逆向
- Android逆向基础笔记—初识逆向
- DLL基础
- DLL基础
- DLL基础
- DLL基础
- Linux常用命令
- Hibernate第五课--查询
- 初学java的String类的compareTo方法
- MVG读书笔记——几何变换
- Hibernate第六课--1+N问题和缓存
- 170722 逆向-DLL基础
- Hibernate第七课--事务,悲观锁,乐观锁
- 也谈测试用例的设计
- sysctl命令详解
- 模拟实现String类
- Linux之进程管理
- Java虚拟机内存分区域与内存溢出异常
- Hibernate删除,添加问题
- MariaDB