Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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
Assembly 如何在原始内存中找到(PE)可执行入口点?_Assembly_Portable Executable - Fatal编程技术网

Assembly 如何在原始内存中找到(PE)可执行入口点?

Assembly 如何在原始内存中找到(PE)可执行入口点?,assembly,portable-executable,Assembly,Portable Executable,我正在做一个ASM项目,我想知道一个可移植可执行程序在原始内存中的入口点。我所说的原始内存是指静态内存,就像我用十六进制编辑器编辑原始.exe文件一样。从程序的PE表中,我可以查找名为“EntryPoint:”的条目,但该条目在加载到内存中后包含程序的入口点!我需要找到程序在原始内存、磁盘中查找第一条指令的位置。有些程序从.text部分的第一个地址开始执行,这很常见,但并不总是发生,这就是我想知道入口点的原因 为了处理这个问题,我使用windows API中的函数MapViewOfFile,在内

我正在做一个ASM项目,我想知道一个可移植可执行程序在原始内存中的入口点。我所说的原始内存是指静态内存,就像我用十六进制编辑器编辑原始.exe文件一样。从程序的PE表中,我可以查找名为“EntryPoint:”的条目,但该条目在加载到内存中后包含程序的入口点!我需要找到程序在原始内存、磁盘中查找第一条指令的位置。有些程序从.text部分的第一个地址开始执行,这很常见,但并不总是发生,这就是我想知道入口点的原因

为了处理这个问题,我使用windows API中的函数MapViewOfFile,在内存中加载example.exe程序,然后查找它的原始内容

我目前正在使用雷达与MASM合作


谢谢

入口点由PE标题中的
AddressOfEntryPoint
给出,它提供入口点的虚拟地址。如果您想找出文件中的位置,您需要遍历section表,找出哪个节包含该虚拟地址——即带有
VirtualAddress
VirtualSize
的节,以便
AddressOfEntryPoint
为=
VirtualAddressOfEntryPoint
且偏移量
AddressOfEntryPoint-VirtualAddress
为<
虚拟化


一旦您找到了,只需计算
指针或WDATA
+偏移量,以确定它在文件中的位置。

入口点由PE头中的
入口点的地址给出,它给出了入口点的虚拟地址。如果您想找出文件中的位置,您需要遍历section表,找出哪个节包含该虚拟地址——即带有
VirtualAddress
VirtualSize
的节,以便
AddressOfEntryPoint
为=
VirtualAddressOfEntryPoint
且偏移量
AddressOfEntryPoint-VirtualAddress
为<
虚拟化

一旦找到了它,只需计算
指针或wdata
+偏移量即可确定它在文件中的位置