我对Portable Executable的结构有几个问题。
现在,我通过几篇写得很好的文章here和here找到了一个很好的开始。但是,我仍然没有得到答案。
我相信, 请 ,如果我错了,请纠正我,PE结构的某个部分中的数据是由操作加载和运行的系统。例如,选择.text
和.data
部分。
根据我所读到的内容,.data
部分包含某种类型的函数,而.text
部分包含要运行的实际数据。
我很想知道是否可以将文件的数据存储在.text部分中,并将其动态移动到.text
部分,然后自动(加载/启动/运行)文件的数据现在位于.text
部分。
如果你对我的要求感到困惑,请允许我解释一下。
答案 0 :(得分:1)
我认为这样的功能甚至可以正常工作吗?
不:)
我根本不清楚你想要完成什么 - 你听起来像是在谈论本地PE,因为.NET PE在PE中没有其他任何东西。
在任何情况下,在加载模块(EXE或DLL)时,Windows都会映射PE,因此您无法实时修改它。
答案 1 :(得分:0)
对于本机代码PE或PE +文件,这些问题会得到很多不同的回答,而这些问题似乎是合理的。
但是,对于封装在PE中的.NET程序集,事情会发生很大变化。 PE / PE +只是OS加载程序几乎没有引用的存储容器。
你可以将一个程序集加载到内存中并执行它,因此你提出的建议在理论上是可行的。但是,它与将代码从PE的一个部分移动到另一个部分无关。
您将动态分配读取/写入虚拟内存,将代码编写到其中,将属性更改为读取+执行(添加执行,删除写入),然后调用相应的.NET程序集加载程序代码。查找各种Invoke方法。