portable-executable相关内容
我在缓冲区中有一个可执行文件,我希望在不将其写入文件的情况下执行它。这个是可能的吗?我的代码示例: with open("somefile.exe", "rb") as exe_file: executable_string = exe_file.read() run(executable_string) def run(executable_string):
..
出于学习目的,我编写了一个小汇编程序(test.asm): global _main extern _ExitProcess@4 section .text _main: mov ebx,0 push ebx call _ExitProcess@4 然后我用NASM(test.obj)组装了它: n
..
在解释词法分析器和解析器之后,所有关于如何创建编译器的文本都停止了.他们没有解释如何创建机器代码.我想了解端到端的流程. 目前我的理解是,Windows exe 文件格式被称为 Portable Executable.我阅读了它的标题,但尚未找到可以轻松解释这一点的资源. 我的下一个问题是,我没有看到任何解释机器代码如何存储在文件中的资源.是不是像 .text 段中一个接一个的存储 3
..
如果我为签名设置时间戳,会发生什么? 如果我不设置怎么办? 这是必要的吗?为什么推荐? 解决方案 时间戳用于指定进行数字签名的时间.这是正确验证签名所必需的. 如果存在签名时间戳,验证(验证)签名的应用程序将检查签名验证所涉及的证书在签名时是否有效.如果签名没有时间戳,则在签名验证时检查证书有效性,这并不总是可以接受的. 示例:证书有效期:2008 年 1 月 1 日证书有
..
我正在尝试用 C++ 构建一个 PE 查看器,如果我尝试在导入目录表中输出库的名称,它似乎会崩溃.我似乎没有得到程序使用的 DLL 的正确指针. HANDLE handle = CreateFile("messagebox.exe",GENERIC_READ,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);DWORD 大小 = GetFileSize(han
..
与 EXE 文件中用于导入外部 DLL 中使用的函数的导入地址表相关的 thunk 表是什么? 这个 thunk 表只是一个包含其他函数的 'Thunks' 的表吗? 解决方案 Thunks 是导入表的一部分 (IMAGE_DIRECTORY_ENTRY_IMPORT) 和延迟导入表 (IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT).它们被描述 http://
..
最终目标是比较在完全相同的环境中从完全相同的源构建的 2 个二进制文件,并能够判断它们确实在功能上是等效的. 为此的一个应用程序是将 QA 时间集中在发布之间实际更改的事情上,以及一般的更改监控. MSVC 与 PE 格式的结合自然使这很难做到. 到目前为止,我发现并消除了这些东西: PE 时间戳和校验和 数字签名目录条目 调试器部分时间戳 PDB 签名、年龄和文件路
..
基本上,我想做的是找到 PE 文件的最后一部分.我已经很仔细地阅读了 PE 规范,但我无法发现我的代码哪里出错了. PIMAGE_DOS_HEADER pidh = (PIMAGE_DOS_HEADER)buffer;PIMAGE_NT_HEADERS pinh = (PIMAGE_NT_HEADERS)(pidh + pidh->e_lfanew);PIMAGE_FILE_HEADER pif
..
作为编写编译器的前身,我试图了解 Windows(32 位)可移植可执行文件格式.我特别希望看到一个简单的可执行文件示例,它除了正确加载、运行和退出之外什么都不做. 我尝试编写和编译一个简单的 C 主函数,它除了生成的 .exe 大约 22KB 之外什么都不做,并且包含许多来自 KERNEL32.DLL 的导入(大概被 LIBC 用于设置环境、堆等).甚至 DOS 标题也可能更小(它当前打印
..
我有一个简单的 .net 核心应用程序并通过以下命令发布它: dotnet publish -c Release -r win10-x64 SqlLocalDbStarter.csproj Exenetcoreapp2.1
..
在我看来它总是 4GB,因为它使用相同大小的数据类型 (A DWORD)?SizeOfImage 的 DWORD 不是总是 32 位吗?还是我对这个限制有误解? 答案 4GB 确实似乎是所有便携式可执行文件(32 位和 64 位 PE+)的硬限制. 解决方案 根据 规范它是 32 位无符号值,用于 PE32+ 图像,就像 PE32 图像一样. 但是,在我对 Windows
..
好吧,所以我的想法是将 64 位和 32 位 Windows 可执行文件绑定到一个应用程序中,这样如果它不运行 64 位版本,它就会尝试 32 位版本. 我正在阅读有关 PE 的内容,并了解了一些关于 MS-DOS 实模式存根的知识,它说明了它如何调用应用程序(通常是错误消息).但是每次我尝试研究 MS-DOS 实模式存根时,它似乎只显示错误消息.所以我的想法是用我的 32 位应用程序覆盖
..
在我看来它总是 4GB,因为它使用相同大小的数据类型 (A DWORD)?SizeOfImage 的 DWORD 不是总是 32 位吗?还是我对这个限制有误解? 答案 4GB 确实似乎是所有便携式可执行文件(32 位和 64 位 PE+)的硬限制. 解决方案 根据 规范它是 32 位无符号值,用于 PE32+ 图像,就像 PE32 图像一样. 但是,在我对 Windows
..
我有一个简单的 .net 核心应用程序并通过以下命令发布它: dotnet publish -c Release -r win10-x64 SqlLocalDbStarter.csproj Exenetcoreapp2.1
..
我正在学习汇编作为恶意软件分析项目的一部分,并尝试使用一些 Node.js 库从 GitHub 抓取可执行文件并反汇编它们. 特别是我专注于 x86-64 PE. 但是一个反汇编器,比如我选择的那个 不一定要找到特定可执行格式的指令,例如在 PE 中. 除了首先需要知道我的指令应该从哪里开始,当我开始使用反汇编程序时,我意识到我还需要为程序设置一个特定的 RIP 值来启动.我不完
..
“修正"在应用于某个部分时究竟有什么作用?在 fasm 示例中,我发现了以下部分声明,但我真的不确定 fixups 属性的作用,我在 fasm 文档中找不到太多相关信息. section '.reloc' fixups data 可读可丢弃如果 $=$$dd 0,8 ;如果没有修正,则生成虚拟条目万一 解决方案 这似乎是 FASM 如何生成 PECOFF DLL 的错误..reloc 部分仅
..
我的问题如下: 可移植可执行文件格式(在 Windows/Unix 上)与一般的 x86/x64 指令集有何关系? PE 格式是存储处理器支持的确切操作码集,还是操作系统转换为与 CPU 匹配的更通用的格式? EXE 文件如何指示所需的指令集扩展(如 3DNOW!或 SSE/MMX?) 操作码是否在所有平台(如 Windows、Mac 和 unix)中通用? 与 Intel i386
..
我想编写一些代码,在运行时将在其自己的进程中打印每个代码段的地址和长度.是否有捷径可寻?我知道使用 void* main_address = main; 之类的代码找到 main 等函数的位置相对容易,但我想找到 .data 和 .text 之类的部分,我不知道当我编译时,我可以对它们做同样的事情.我正在 Windows 系统上编写此实验并针对 x86 架构进行编译.如果解决方案需要,我知道一些
..
我已经为 x86-64 制作了(在汇编器中,没有链接器)一个 EXE,它在 Linux 下的 Wine 中运行得非常好.这是一个调用 MessageBoxA 和 ExitProcess 的基本 HelloWorld. Windows 10 无法识别它,并说“此程序无法在您的计算机上执行,请与您的供应商联系以获取适合您计算机的版本". 我使用 PE 格式阅读器(PE 工具和 CFF Ex
..
我正在尝试生成 PE 格式的可执行文件 - Windows 7,64 位,最初是用于测试目的的最小文件,仅用于 mov eax, 42回复 我有一个 dumpbin 似乎很满意并且包含所有字段的明显有效值,我可以找到的各种来源说实际使用过,但是当我尝试运行它时,Windows 说“不是有效的 Win32 应用程序".dumpbin 输出如下;谁能从中看出我错过了什么? 文件 a.exe 的转
..