如何确定dll文件是使用Delphi还是Lazarus编译为x64或x86位
发布时间:2020-12-14 04:36:41 所属栏目:Windows 来源:网络整理
导读:使用Delphi 2007或Lazarus(Win64)我正在寻找一种方法来确定是否将dll编译为x64或x86? 您应该阅读并解析PE头. 像这样: function Isx64(const Strm: TStream): Boolean;const IMAGE_FILE_MACHINE_I386 = $014c; // Intel x86 IMAGE_FILE_MACHINE_IA64 = $020
使用Delphi 2007或Lazarus(Win64)我正在寻找一种方法来确定是否将dll编译为x64或x86?
您应该阅读并解析PE头.
像这样: function Isx64(const Strm: TStream): Boolean; const IMAGE_FILE_MACHINE_I386 = $014c; // Intel x86 IMAGE_FILE_MACHINE_IA64 = $0200; // Intel Itanium Processor Family (IPF) IMAGE_FILE_MACHINE_AMD64 = $8664; // x64 (AMD64 or EM64T) // You'll unlikely encounter the things below: IMAGE_FILE_MACHINE_R3000_BE = $160; // MIPS big-endian IMAGE_FILE_MACHINE_R3000 = $162; // MIPS little-endian,0x160 big-endian IMAGE_FILE_MACHINE_R4000 = $166; // MIPS little-endian IMAGE_FILE_MACHINE_R10000 = $168; // MIPS little-endian IMAGE_FILE_MACHINE_ALPHA = $184; // Alpha_AXP } IMAGE_FILE_MACHINE_POWERPC = $1F0; // IBM PowerPC Little-Endian var Header: TImageDosHeader; ImageNtHeaders: TImageNtHeaders; begin Strm.ReadBuffer(Header,SizeOf(Header)); if (Header.e_magic <> IMAGE_DOS_SIGNATURE) or (Header._lfanew = 0) then raise Exception.Create('Invalid executable'); Strm.Position := Header._lfanew; Strm.ReadBuffer(ImageNtHeaders,SizeOf(ImageNtHeaders)); if ImageNtHeaders.Signature <> IMAGE_NT_SIGNATURE then raise Exception.Create('Invalid executable'); Result := ImageNtHeaders.FileHeader.Machine <> IMAGE_FILE_MACHINE_I386; end; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |