- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我需要区分 32 位 PE 和 16 位 DOS MZ。正确的做法是什么?我可以使用启发式方法,例如查找 PE header ,但我觉得它不一定是确定性的
最佳答案
所有 DOS 风格的可执行文件都有一个“MZ”作为前两个字节。
要识别 MSDOS 可执行文件与众多其他变体,最好的办法似乎是读取文件中偏移量 0x0018 处重定位表的位置,如果它大于 0x0040(进入文件),则它不仅仅是普通的 DOS .
为了明确地将可执行文件标识为“PE”可执行文件,在文件中的偏移量 0x003C 处有一个指针。这是文件中的偏移量,将包含字节“PE”和两个空值。其他 MSDOS 的“MZ”变体将使用相同的位置来放置其他代码,例如:“NE”、“W3”、“LE”等。
“PE”样式的可执行文件也有多种形式,我希望您至少会对 32 位与 64 位感兴趣。
可能对这类事情的最终权威是 Unix 的"file"命令,它旨在通过调查其内容来可靠地识别任何文件类型。 MSDOS 部分已列出 here .微软在这方面不是可靠的权威,因为他们忽略了非微软信息。
关于c - 如何区分16位MZ和32位MZ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28804432/
感谢阅读 StackOverflow 上的错误处理,我发现了 Mz-Tools。但是,我想知道是否有办法同时更新 MZ-Tools 添加的所有错误处理程序。 如果我使用 MZ-Tools 添加错误处理
我有以下代码可以使用我的 android 2.3.7 在我的 zebra mz 220 中打印: public class Printing extends Activity { ProgressDi
DOS 可执行文件的前 2 个字节是 0x4d 和 0x5a。如果这些被执行,0x4d 意味着 'dec ebp' 和 0x5a 是 'pop edx'。 'dec ebp' 将基址指针减 1,'po
DOS 可执行文件的前 2 个字节是 0x4d 和 0x5a。如果这些被执行,0x4d 意味着 'dec ebp' 和 0x5a 是 'pop edx'。 'dec ebp' 将基址指针减 1,'po
我想从二进制(“.exe”)文件中获取 Unicode 字符串。 当我使用这样的代码时: `unicode_str = re.compile( u'[\u0020-\u007e]{1,}',r
我将 Times New Roman 字体下载到我的 Zebra 打印机,当我单击“示例打印输出”(抱歉翻译不当)时,它打印出波兰语字母,但是当我使用 CPCL 命令时,它不起作用。 我的代码示例:
我的印象是什么 VERSIONINFO 资源是纯粹的 Windows 发明,但是在阅读 documentation 时,我偶然发现了 VERSIONINFO 资源定义语句的 fileos 参数的 VO
我正在尝试学习如何使用程序集 (NASM) 创建 Dos .EXE 文件,手动构建 header 并将文件汇编为二进制文件。我的页面选项有问题(页面总数和最后一页的字节数)。无论我将初始值设置得有多小
我想知道确定 EXE 文件的 MZ 部分结束位置以及附加的扩展可执行文件开始位置(可以是 PE/LE/LX/NE/COFF 等...)的最佳方法是什么。 我找到了这个网站:http://www.del
我有一个库,我已经使用 swig 为它生成了 tcl 绑定(bind)。这样生成的dll是xyz_tcl.dll,如果我原来的lib dll是xyz.dll的话。但是当我尝试加载 dll 时,它说“无
我是一名优秀的程序员,十分优秀!