[C/C++]_[判断程序是32位还是64位]

时间:2022-12-16 03:31:51

http://blog.csdn.net/infoworld/article/details/10958583

场景:

1.编译器没有显式的指定。

2.需要根据32,64做不同的处理.


方法1:

[cpp] view plain copy
  1. #include "stdio.h"  
  2.   
  3. int main(int argc,char * argv[])  
  4. {  
  5.     void* number =  0;  
  6.     printf("%d\n",sizeof(&number));  
  7. }  

输出8就是64位的,4就是32位的。根据逻辑地址判断。


方法2:

可以用file命令判断(如果安装了msys的话,linux下应该自带)

file msys-expat-1.dll

[plain] view plain copy
  1. msys-expat-1.dll: PE executable for MS Windows (DLL) (console) Intel 80386 32-bi  
  2. t  

方法3:

[plain] view plain copy
  1. If you have a hex editor program, just open your file with it and shortly after the standard header intro stuff (like  
  2.  "This program cannot be run in DOS mode...") you will see either  
  3. "PE..L" (hex code: 504500004C) = 32 bit  
  4. or  
  5. "PE..d†" (hex code: 504500006486) = 64 bit  
  6.   
  7. 随手UE打开了两个exe,果然有效。但是这个50450000????的位置不确定,大致在00000100h附近。  
  8.   
  9. 另 exe 文件头的典型提示字串未必统一。如一个是This program cannot be run in DOS mode,另一个是  
  10. This program must be run under Win32  
   原文

方法4:

vs的工具dumpbin,参数/HEADERS

64 bit

[plain] view plain copy
  1. E:\software\TDM-GCC-64\bin>dumpbin /HEADERS libgcc_s_seh_64-1.dll  
  2. Microsoft (R) COFF/PE Dumper Version 10.00.40219.01  
  3. Copyright (C) Microsoft Corporation.  All rights reserved.  
  4.   
  5.   
  6. Dump of file libgcc_s_seh_64-1.dll  
  7.   
  8. PE signature found  
  9.   
  10. File Type: DLL  
  11.   
  12. FILE HEADER VALUES  
  13.             8664 machine (x64)  

32 bit

[plain] view plain copy
  1. E:\software\TDM-GCC-64\bin>dumpbin /HEADERS g++.exe  
  2. Microsoft (R) COFF/PE Dumper Version 10.00.40219.01  
  3. Copyright (C) Microsoft Corporation.  All rights reserved.  
  4.   
  5.   
  6. Dump of file g++.exe  
  7.   
  8. PE signature found  
  9.   
  10. File Type: EXECUTABLE IMAGE  
  11.   
  12. FILE HEADER VALUES  
  13.              14C machine (x86)