Delphi 2007+ 또는 Lazarus (Win64)를 사용하여 dll이 x64 또는 x86으로 컴파일되었는지 확인하는 방법을 찾고 있습니까?dll 파일이 Delphi 또는 Lazarus를 사용하여 x64 또는 x86 비트로 컴파일되었는지 확인하는 방법
6
A
답변
14
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;
4
당신은 JCL에서 JclPeImage를 사용할 수 있습니다. 다음 앱에서는이를 수행하는 방법을 보여줍니다.
program Isx64ImageTest;
{$APPTYPE CONSOLE}
uses
SysUtils, JclWin32, JclPEImage;
var
PEImage: TJclPeImage;
begin
PEImage := TJclPeImage.Create;
try
//usage is "Isx64ImageTest filename"
PEImage.FileName := ParamStr(1);
//print the machine value as string
WriteLn(Format('Machine value of image %s is %s',
[PEImage.FileName, PEImage.HeaderValues[JclPeHeader_Machine]]));
//check for a special machine value
case PEImage.LoadedImage.FileHeader^.FileHeader.Machine of
IMAGE_FILE_MACHINE_I386: begin end;
IMAGE_FILE_MACHINE_AMD64: begin end;
else
begin
end;
end;
finally
PEImage.Free;
end;
end.
관련 문제
- 1. 시스템에 x86 또는 x64가 있는지 확인하는 방법
- 2. x86 - x64 포팅 쿼리
- 3. .NET 어셈블리가 TRACE 또는 DEBUG 플래그로 컴파일되었는지 확인하는 방법
- 4. 폴더 또는 파일이 숨겨져 있는지 확인하는 방법 =
- 5. vb.net 매크로 코드에서 실행중인 프로세스의 유형 (x64 또는 x86) 얻기
- 6. RXTX x64 및 x86
- 7. dylib가 10.6 또는 10.5 용으로 컴파일되었는지 확인하는 방법은 무엇입니까?
- 8. 사용할 SQLCMD.exe (x64 또는 x86) - SQL Server 2008?
- 9. MATLAB에서 x64 또는 x86 운영 체제를 실행하는지 확인
- 10. MSBuild 부트 스트 래퍼에서 x86 또는 x64 MSI를 실행하십시오.
- 11. C# 프로젝트를 빌드 할 때 Visual Studio 사본 x64 DLL 또는 x86 DLL을 가지고 있습니다
- 12. SharePoint 서버 2010 (x64)에 x86 컴파일 코드를 배포하는 방법
- 13. x86 및 x64 용으로 컴파일
- 14. 파일이 EXE 또는 DLL인지 확인하는 방법은 무엇입니까?
- 15. 사용중인 JVM이 x86 또는 x64 인 경우 Maven 종속성을 다르게 해결합니까?
- 16. * .doc 파일이 Java 또는 ColdFusion과 RTF인지 확인하는 가장 좋은 방법
- 17. DLL 디버그 컴파일 있는지 확인하는 방법
- 18. x64 컴퓨터에서 gcc를 사용하여 x86 어셈블리 코드를 컴파일하는 방법
- 19. x86 및 x64 스택 프레임
- 20. 파일이 수정 또는 변경되지 않았 음을 확인하는 가장 좋은 방법
- 21. PHP에서 파일이 ASCII 또는 이진 파일인지 확인하는 방법
- 22. 파일이 이동식 드라이브 또는 로컬 드라이브에 있는지 확인하는 방법
- 23. WIX Heat (v3.5, v3.6)로 원시 (x86 또는 x64) COM Dll의 등록 정보를 수집 하시겠습니까?
- 24. 동일한 vdproj 파일을 사용하여 x86 및 x64 설치 프로그램을 만드시겠습니까?
- 25. 웹 서비스 또는 DLL?
- 26. Visual Studio 2008을 사용하여 x86에서 x64 dll 컴파일
- 27. 단일 x86 기반 어셈블리 전체 어셈블리가 32 비트로 실행되도록
- 28. long 또는 int 값이 64 비트로 변환됩니다.
- 29. x86/x64 감지 및 올바른 .msi 설치
- 30. 파일이 디렉토리인지 또는 파일인지 확인
나는 다음과 같은 정보를 발견했습니다하지만 동화 할 시간이 없었어요 : http://www.tech-archive.net/Archive/Development/microsoft.public.win32.programmer.tools/ 2006-12/msg00011.html 이 링크 : http://www.delphidabbler.com/articles?article=8&part=2 이전 링크 된 기사에서 언급 한 은 델파이 소스를 제공하여 16 & 32 비트이지만 64는 아닙니다.이 코드는 델파이 2007에서 실행될 수 있지만 델파이 2010이나 라자루스에서는 실행되지 않습니다. – TheSteven