Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ PE头-新部分-如何计算内存中的OEP地址?_C++_Header_Stub_Portable Executable_Entry Point - Fatal编程技术网

C++ PE头-新部分-如何计算内存中的OEP地址?

C++ PE头-新部分-如何计算内存中的OEP地址?,c++,header,stub,portable-executable,entry-point,C++,Header,Stub,Portable Executable,Entry Point,我刚刚成功地在Windows10中向pe文件(在本例中为my proxy.exe)添加了一个节和一些代码。我还将入口点更改为新部分的开头。当我运行修补过的.exe时,我的存根被调用,我听到一声高频的哔哔声(我先用哔哔声测试过),到目前为止还不错 但现在我想回到OEP。但是如何计算oep在内存中的地址? 我考虑过这个问题,然后想出了一个解决方案: 计算除我刚添加的部分之外的所有部分的Rsize,然后得到内存中存根的地址(增量偏移量),并从中减去总的部分大小。现在我应该在内存中.text部分的开头。

我刚刚成功地在Windows10中向pe文件(在本例中为my proxy.exe)添加了一个节和一些代码。我还将入口点更改为新部分的开头。当我运行修补过的.exe时,我的存根被调用,我听到一声高频的哔哔声(我先用哔哔声测试过),到目前为止还不错

但现在我想回到OEP。但是如何计算oep在内存中的地址? 我考虑过这个问题,然后想出了一个解决方案:

计算除我刚添加的部分之外的所有部分的Rsize,然后得到内存中存根的地址(增量偏移量),并从中减去总的部分大小。现在我应该在内存中.text部分的开头。之后,我添加oep的偏移量,就这样了

这样做有效吗?还是我犯了错误?还有其他可能更简单的方法吗?那么DLL呢,整个过程有什么不同吗?


对于OEP,我想你意味着修复图像头。入口点的地址

好的,如果我得到的是正确的,那么您将使用IP->减去预期RVA(相关虚拟地址)的偏移量,以获得模块的加载地址,并将其添加到OEP的RVA以获得入口点的真实地址。 如果你算对了,这就行了

我没有评论特权,但我认为它应该作为评论而不是回答,因为我还没有完全尝试过这件事,但这是一个建议,类似于编译器对二进制文件所做的

OEP是一种RVA,在注射过程中,您有原始RVA和您已替代的注射RVA。在注入逻辑中,只需添加

偏移:推送原点


然后在PE的重定位表中为偏移添加重定位条目。装载机将完成其余的工作

什么操作系统?我的理解是,可执行文件的位置取决于O.S(如果有)。哦,我忘了说对不起——Windows10*编辑文章