
上面是MS-DOS头字段的完整列表,但我不知道哪些是强制性的,哪些是可选的,有人知道吗?
我正在尝试完成这个仅用程序集制作的 PE 文件,它应该在控制台中显示一条消息。我想以这样的方式组织它,以便以后可以轻松添加更多内容(知道在哪里添加代码、数据、导入的函数)。
我现在创建了 4 个部分,分别用于代码、数据、未启动的数据和导入的元素。我现阶段的主要问题是:
首先,我将在下面显示我的所有代码。一些真正不重要的东西不会被添加,以节省时间并使其更易于阅读这是 NASM 代码
; Constants (use '$' as prefix)
$SECTION_ALIGNMENT equ 4096 ; Each section is aligned to 4096 in memory
$FILE_ALIGNMENT equ 512 ; Each section is aligned to 512 on disk
$PREFERRED_ADDRESS equ 4194304 ; Preffered address for EXE is 4 MB
$TOTAL_PE_SECTIONS equ 4 ; Code, Data, Bss and IData
; Image size = headers aligned to section alignment …Run Code Online (Sandbox Code Playgroud) 我正在尝试生成 PE 格式的可执行文件 - Windows 7,64 位,最初是用于测试目的的最小文件,其作用无非是
\n\nmov eax, 42\nret\nRun Code Online (Sandbox Code Playgroud)\n\n我有一个转储箱似乎很满意,并且包含我可以找到的各种来源说实际使用的所有字段的明显有效值,但是当我尝试运行它时,Windows 说“不是有效的 Win32 应用程序”。dumpbin 输出如下;有人能从中看出我错过了什么吗?
\n\nDump of file a.exe\n\nPE signature found\n\nFile Type: EXECUTABLE IMAGE\n\nFILE HEADER VALUES\n 8664 machine (x64)\n 1 number of sections\n 0 time date stamp Thu Jan 01 00:00:00 1970\n 0 file pointer to symbol table\n 0 number of symbols\n F0 size of optional header\n 22 characteristics\n Executable\n Application can handle large (>2GB) addresses\n\nOPTIONAL HEADER VALUES\n 20B magic # (PE32+)\n 2.05 linker version\n 0 size …Run Code Online (Sandbox Code Playgroud) 所以我正在尝试使用 Python 为学校项目编写一个基本的反汇编程序。我正在使用 pydasm 和 capstone 库。我不明白的是如何使用 Python 实际访问程序的汇编指令。这些库允许我反汇编指令,但我不知道如何在 Python 中访问程序的指令。有人能给我一些指导吗?
谢谢。
我正在制作一个加壳器(运行时压缩)来研究Windows PE格式文件。我知道一些数据压缩算法,例如 RLE、LZW、霍夫曼编码等。但是哪种算法最适合压缩二进制数据(例如文件).exe?谁能建议哪种算法是压缩二进制数据的最佳算法?
我知道 PE 32 位结构,我想知道 PE 32 位和 PE 64 位之间有什么区别(定义 64 位 PE 结构)?
我注意到我正在编写的一些代码中存在潜在的错误。
我认为,如果我使用mov ax, seg segment_name,该程序可能是不可移植的,并且只能在特定配置的一台机器上运行,因为加载位置可能因机器而异。
所以我决定在两台运行 DOS 的不同机器上反汇编一个只包含一条指令的程序,我发现问题神奇地解决了。
一号机上的调试输出:0C7A:014C B8BB0C MOV AX,0CBB
二号机器上的调试输出:06CA:014C B80B07 MOV AX,070B
十六进制转储程序后,我发现未更改的字节实际上是B84200.
手动将这些字节插入到程序中会导致mov ax, 0042
那么 PE 格式是否存储对这些指令的引用并在运行时更新它们?
dos relocation portable-executable memory-segmentation x86-16
我清楚地记得,在某些时候,能够扩展 PE 标头并在 IDA 上查看存储在其中的所有内容,但是当我现在查看它时,它只显示标头中的一些基本信息,然后立即进入第一部分。我特别记得能够展开节标题并查看信息,例如每个标题的大小、它们的相对虚拟地址等等。我怎样才能做到这一点?
现在我什至无法在十六进制视图中返回足够远的位置来查看标题,因此十六进制视图停止在文本部分的开头。
我需要将32位PE与16位DOS MZ区分开来.这样做的正确方法是什么?我可以像寻找PE头一样使用启发式算法,但我觉得它不一定是确定性的
将“修正程序”应用于某个部分时究竟能做什么?在一个fasm示例中,我找到了以下部分,我真的不确定fixups属性的作用,我在fasm文档中找不到有关此信息的太多信息。
section '.reloc' fixups data readable discardable
if $=$$
dd 0,8 ; if there are no fixups, generate dummy entry
end if
Run Code Online (Sandbox Code Playgroud)