背景 我最近研究了DLL内存加载,网上找了好久代码,基本的原理差不多,自己稍微总结一下。 逻辑 内存读取PE,按照PE格式进行加载(任何一本介绍PE的书籍都可以看有关知识) 修复重定位表(这点非常重要,我开始不明白他怎么修复定位表) 修复定位表 其他细节(tls回调,修改PEB) 调用入口启动 疑惑 1:怎么执行代码? 我们创建内存,然后复制PE到内存中,然后直接调用,但一些变量地址或者函数地址是以va(虚拟地址)直接访问,这些地址固定死的,但加载内存时候,基本不可能是原来的基地址,那么这些地址就是错误地址。那么这…