jjzjj

windows - 为什么PE需要Original First Thunk(OFT)?

有“FirstThunk”(FT),加载程序在执行后用正确的地址覆盖它。但是PE什么时候用OFT呢?PE还需要它吗? 最佳答案 如果导入已绑定(bind)但导入的.DLL不匹配,则需要原始的第一个thunk。在新的未打补丁版本的Windows上,基础.DLL(ntdll、kernel32、user32等)中所有函数的所有地址都是已知的。以shell32为例,它链接到kernel32!CreateProcess,CreateProcess的真实地址可以直接存储在shell32中。这称为importbinding,它让加载器跳过查找导入

windows - 计算PE文件中入口点的文件偏移量

在http://en.redinskala.com/finding-the-ep/有关于如何在exe文件中找到入口点的文件偏移量的信息。我可以在这里阅读EP(File)=AddressOfEntryPoint–BaseOfCode+.text[PointerToRawData]+FileAlignment然而,当我自己计算时(我使用了几个不同的exe文件)我得出的结论是OffsetofentrypointinEXEfile=AddressOfEntryPoint+.text[PointerToRawData]-.text[VirtualAddress]AddressOfEntryPoi

windows - 关于Windows中PE的入口点

它总是在代码段的最低地址吗? 最佳答案 不,不一定。PE入口点在IMAGE_OPTIONAL_HEADER中定义结构,在AddressOfEntryPoint字段中:Apointertotheentrypointfunction,relativetotheimagebaseaddress.Forexecutablefiles,thisisthestartingaddress.Fordevicedrivers,thisistheaddressoftheinitializationfunction.Theentrypointfuncti

Windows PE 资源

有很多WindowsPE资源查看器程序。但它们是如何工作的?他们是否解码对winapi的函数调用,或者PE是否有一些GUI信息部分?就像Android有XMLGUI定义一样?谢谢。 最佳答案 可能有不同的实现策略,因此不可能对所有工具都通用地回答这个问题。PEfileformatspecification是公开的。它指定了PE文件的节结构,如何在文件中找到.rsrc节,以及如何从该节中提取单个资源。individualresourceformats也记录在MSDN上。例如,对话框GUI定义在DLGTEMPLATE中定义结构。

c++ - 如何在不链接 kernel32.dll 和 ntdll.dll 的情况下运行 PE 镜像

我试图写一个peloader。我首先将可执行镜像及其所有依赖的dll(包括kernel32.dll和ntdll.dll)加载到内存中,处理所有导入地址表,重写所有需要重定位的数据。然后我按顺序调用所有图像的入口点。我从ntdll.dll的入口点得到返回码0,但kernel32.dll返回0xC0000000。当我尝试调用可执行镜像的入口点时,程序崩溃了。我知道windows系统在创建进程时已经将ntdll.dll和kernel32.dll加载到进程内存中。我的问题是如何将ntdll.dll和kernel32.dll的另一个拷贝加载到内存中,并将我的模块链接到拷贝。我做了一个实验:1.复

windows - 分析 .exe/.dll (Windows PE) 文件中的代码膨胀

假设我有一个包含十几个不同模块的项目,这些模块生成一个DLL,我如何分析它以便确定每个模块/函数贡献的实际文件大小?我知道使用发布版本可能无法实现,其中很多信息已被剥离,但如果我有完整的源代码并且可以进行调试版本呢?此外,如果某处定义了较大的静态变量,我是否可以轻松找到它们?奖励问题:LinuxELF文件怎么样? 最佳答案 每当我参与识别膨胀时,我通常从dumpbin开始在Windows上。通常通过编写工具通过dumpbin检查每个对象模块然后分析输出。它往往是一个迭代过程,可能需要相当长的时间。用于使用PDB进行调试构建Sizer

windows - 我如何使用其 header 确定确切的 PE 图像文件大小?

我需要字节大小,IMAGE_OPTIONAL_HEADER.SizeOfImage似乎四舍五入到(不确定)边界并且大于实际文件大小。 最佳答案 IMAGE_OPTIONAL_HEADER.SizeOfImage是虚拟内存中加载的可执行文件/dll的大小。它与磁盘上的大小不同。可以用上一节的VirtualAddress+VirtualSize计算IMAGE_OPTIONAL_HEADER.SizeOfImage是四舍五入到IMAGE_OPTIONAL_HEADER.SectionAlignment的值(通常与页面大小相同)。

windows - PE文件操作码

我正在编写一个PE文件解析器,我已经到了想要解析和解释PE文件中实际代码的地步,我假设这些代码存储为x86操作码。例如,DLL中的每个导出都指向函数将存储在内存中的RVA(相对虚拟偏移),我编写了一个函数来将这些RVA转换为物理文件偏移。问题是,这些真的是操作码,还是别的东西?函数在文件中的存储方式是否取决于编译器/链接器,或者它们是一字节还是两字节的X86操作码。例如,Windows7DLL“BWContextHandler.dll”包含四个加载到内存中的函数,使它们在系统内可用。第一个导出函数是“DllCanUnloadNow”,它位于文件中的偏移量0x245D处。此数据的前四个字

windows - 从 PE 文件中删除 DOS stub

是否可以从PE文件中删除DOSstub和DOSheader? 最佳答案 PE文件必须以IMAGE_DOS_HEADER开头,后面的某个点是定义现代PE字段的IMAGE_NT_HEADERS结构。IMAGE_DOS_HEADER有两个必填字段-e_magic必须包含值IMAGE_DOS_SIGNATURE(在ASCII中看起来像“MZ”),e_lfanew必须是从文件开头到IMAGE_NT_HEADERS开头的偏移量。除了这两个字段,IMAGE_DOS_HEADER的其余部分对于16位Windows之后的Windows是可选的,可以为

windows - 64 位 Windows 上 PE 文件的最大大小是多少?

在我看来它总是4GB,因为它使用相同大小的数据类型(ADWORD)?SizeOfImage的DWORD不是总是32位的吗?还是我误解了这个限制?回答4GB确实似乎是所有可移植可执行文件(32位和64位PE+)的硬性限制。 最佳答案 根据spec对于PE32+图像,它是32位无符号值,就像PE32图像一样。但是,在我对Windows7SP1HomePremiumx64上的32位和64位应用程序(PE32/PE32+文件)进行的测试中,两者的最大文件大小都在1.8-1.85GB之间。我通过使用VisualStudio创建一个非常基本的C