使用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;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。