jjzjj

windows - 生成PE格式的可执行文件

我正在尝试生成PE格式的可执行文件;我正处于dumpbin满意的阶段,据我所知,这与与Microsoft链接器链接的空程序没有本质区别,但Windows仍然拒绝它:PEfile-what'smissing?如果我有一些生成有效PE文件的算法,也许我可以从那里爬山。到目前为止,这是我发现的内容:有大量文档、示例代码和工具可用于阅读PE文件,而不是从头开始生成它们。PEBliss在其功能中列出了生成,但不会编译。用于生成PE文件的示例汇编语言模板专注于最小化大小。看起来最有前途的生成一个Windows拒绝的文件,尽管据我所知它应该被接受;具有讽刺意味的是,我发现确实有效的那个生成了一个Wi

windows - 如何在 Windows PE 脚本中使用 `wmic`?

我正在尝试确定在WindowsPE3.1上下文中运行的批处理脚本中的计算机型号(例如“Optiplex9010”)。当正常运行Windows时,我可以使用wmiccsproduct或wmicbios来执行此操作,但在运行WindowsPE时这些都不会返回任何数据。(这似乎也适用于大多数或所有其他类。)我已经安装了winpe-wmi.cab包来支持WMI。使用wmic路径而不是别名没有区别。如何使我的wmic命令起作用? 最佳答案 事实证明,大多数wmic命令,包括wmiccsproduct和wmicbios,都可以在安装winpe时

c++ - 区分 cl.exe (Visual Studio C++) 生成的 32 位和 64 位 PE 目标文件

给定来自cl.exe的两个PE目标文件,一个32位和一个64位,我如何不借助unix实用程序区分一个和另一个,最好是在命令行(cmd.exe或powershell)?C:\>"...\VC\bin\cl.exe"-ctest.c-Fotest32.objC:\>"...\VC\bin\x86_amd64\cl.exe"-ctest.c-Fotest64.obj如果我安装msys2file实用程序可以理解它:$filetest*.objtest32.obj:Intel80386COFFobjectfile,notstripped,3sections,[...]test64.obj:dat

windows - PE 加载器不加载哪些部分?

PE加载器是否完全加载了任何部分?或者是否加载了节标题中指定的每个节?在ELF程序中,应该加载的节头(称为程序头或段)是那些用PT_LOAD标记的。PE项目中有类似的东西吗?附言。我找到了标志IMAGE_SCN_MEM_DISCARDABLE。是否标记有未加载的部分? 最佳答案 当重定位段可用,但PE镜像不需要重定位时,加载器不加载重定位段。如果PE镜像已进行数字签名,则它有一个包含证书的部分。此部分未由加载程序加载。此外,如果调试部分可用,加载程序也不会加载它。 关于windows-P

c++ - 是否可以使用内存缓冲区(或 PE 资源)来支持只读 SQLite 数据库?

我想使用Windows的“自定义资源”功能将存储在SQLite数据库中的相当大的数据block嵌入到我的二进制文件中。(这是一个日志记录工具的白名单)SQLite确实支持inmemorydatabases,但看起来这可能仅限于创建全新的数据库;并且似乎不支持从内存缓冲区读取;但我并不肯定。数据库是否支持这样的东西?(由于其他原因我必须嵌入SQLite,所以将它用于白名单也很棒......) 最佳答案 sqlite文档在线备份部分http://www.sqlite.org/backup.html有一些代码可以做你想做的事(即将内存数据

windows - PE 文件节名

根据这篇文章http://msdn.microsoft.com/en-us/library/ms809762.aspx?ppud=4我们可以用自定义名称命名PE部分。所以在一个PE文件中,它的创建者用他自己的名字替换了部分名称,现在,如果“.pdata”部分不再称为“.pdata”,那么我就无法通过它的名称找到它。我怎样才能找到“.pdata”? 最佳答案 正确,根据WindowsPortableExecutablespecification和其他来源,如MattPietrek的来源,部分名称是为人类制作的!通常,编译器为特定类型的

c++ - 如何获取PE文件签名偏移量?

我正在尝试解析PE文件,将其加载到内存中并将WinNT结构指针设置为适当的地址。但是,我无法对PE\0\0签名进行愚蠢的检查,因为我与DOSheader的偏移量有误(一个字节太多)。因此,当我检查IMAGE_NT_HEADERS.Signature时,我收到从“E”开始的4个字节。#defineSHOW_VAR(x)std::cout(m_image.get());//--m_DOSHeader->e_lfanew;(m_image.get()+m_DOSHeader->e_lfanew);//DEBUGSHOW_HEX(m_DOSHeader->e_lfanew);for(inti=

windows - PE 文件格式 - 节表和第一节之间是什么?

在十六进制编辑器中查看PE文件时,我经常遇到节表和第一节之间的一些字节,这对我来说真的没有意义。就我而言,应该有一个00字节的填充以适合对齐。然而,这里有一个截屏,展示了相反的情况:事实证明,突出显示的block几乎就是绑定(bind)的导入表。但我仍然很困惑。为什么这张表不在一个部分?情况总是如此还是只是某个编译器/链接器的规范?我没有找到有关此特定问题的任何文档。人们可以找到的关于这个主题的所有内容基本上都是这样说的:DOSMZ标题DOSstubPEheader分区表第1部分第2部分第3部分...等等在我遇到这个问题之前,我什至没有意识到这些部分之外可能还有一些东西(当然除了我上面

windows - PE 文件 - 缺少什么?

我正在尝试生成一个PE格式的可执行文件-Windows7,64位,最初是一个用于测试目的的最小文件,仅执行以下操作moveax,42ret我有一个dumpbin似乎很满意并且包含所有字段的明显有效值我可以找到的各种来源说实际使用了,但是当我尝试运行它时,Windows说“不是有效的Win32应用程序”.dumpbin输出如下;谁能从中看出我缺少什么?Dumpoffilea.exePEsignaturefoundFileType:EXECUTABLEIMAGEFILEHEADERVALUES8664machine(x64)1numberofsections0timedatestampTh

windows - PE文件中section和数据目录是什么关系?

我试图更好地理解PE格式,我想知道PE文件中的节和数据目录之间的关系是什么。打开一个PE文件,我注意到它们经常重叠,但我不清楚为什么或它们如何相关,而且Microsoft的官方PE文件格式规范似乎并没有真正使这一点更加清楚。我知道节头的名称值可以更改,因此不能保证对特定block的引用,因此应该依赖数据目录来查找文件中的特定block。在我打开的示例PE文件中,我注意到.text部分与导入地址表数据目录header具有相同的偏移量,尽管IAT大小列为8,而.text部分大小为6804。在对比资源数据目录header声明它从16384开始,长度为1568-与.rsrc部分的条目完全吻合。