在Windows(C/C+;+;)上检查应用程序二进制文件的位
在不运行二进制文件(EXE)的情况下/运行前是否可以检查其位?这在Linux上很容易做到,但我不熟悉Windows二进制格式 谢谢。看看答案在Windows(C/C+;+;)上检查应用程序二进制文件的位,c,windows,C,Windows,在不运行二进制文件(EXE)的情况下/运行前是否可以检查其位?这在Linux上很容易做到,但我不熟悉Windows二进制格式 谢谢。看看答案 它说,可以使用Windows平台SDK中的dumpbin/headers来获取这些信息。有许多工具可以帮助您发现应用程序的比特(如WinDbg或PeStudio) 读取标题: 首先,您可以这样做,(应该同时适用于dll和exe): (仅在少数几个文件上进行了测试——这些文件给出了正常结果。) #包括 #包括 #包括 /*运行时字节顺序检测-摩托罗拉或英特
它说,可以使用Windows平台SDK中的
dumpbin/headers
来获取这些信息。有许多工具可以帮助您发现应用程序的比特(如WinDbg或PeStudio)
读取标题:
首先,您可以这样做,(应该同时适用于dll和exe):(仅在少数几个文件上进行了测试——这些文件给出了正常结果。)
#包括
#包括
#包括
/*运行时字节顺序检测-摩托罗拉或英特尔(不捕获混合)*/
静态整数字节顺序(无效)
{
并集{double d;无符号整数i[2];}u;
u、 d=1.0;
返回(u.i[0]!=0);
}
/*字符到无符号整数*/
静态无符号整数chr_到ui(无符号字符*buf,整数mm)
{
如果(毫米)
返回buf[0]因为您标记了这个问题C
,所以有一个Win32 API函数。但是它不适用于DLL
if ( GetBinaryType(argv[i], &bintype) ) {
switch(bintype) {
case SCS_32BIT_BINARY: typename = TEXT("Windows 32 Bit"); break;
case SCS_64BIT_BINARY: typename = TEXT("Windows 64 Bit"); break;
case SCS_DOS_BINARY: typename = TEXT("DOS-Programm"); break;
case SCS_OS216_BINARY: typename = TEXT("OS/2-Programm"); break;
case SCS_PIF_BINARY: typename = TEXT("PIF-Datei"); break;
case SCS_POSIX_BINARY: typename = TEXT("POSIX-Programm"); break;
case SCS_WOW_BINARY: typename = TEXT("Windows 16 Bit"); break;
default: typename = TEXT("unknown"); break;
}
}
else {
typename = TEXT("not executable");
}
是的,这是可能的。我不确定这些信息是否直接存储在PE头中,但它肯定存储在EXE、DLL等文件中。你知道如何检索它吗?是否有某种API?我似乎找不到任何Windows二进制格式的文档…可能是
if ( GetBinaryType(argv[i], &bintype) ) {
switch(bintype) {
case SCS_32BIT_BINARY: typename = TEXT("Windows 32 Bit"); break;
case SCS_64BIT_BINARY: typename = TEXT("Windows 64 Bit"); break;
case SCS_DOS_BINARY: typename = TEXT("DOS-Programm"); break;
case SCS_OS216_BINARY: typename = TEXT("OS/2-Programm"); break;
case SCS_PIF_BINARY: typename = TEXT("PIF-Datei"); break;
case SCS_POSIX_BINARY: typename = TEXT("POSIX-Programm"); break;
case SCS_WOW_BINARY: typename = TEXT("Windows 16 Bit"); break;
default: typename = TEXT("unknown"); break;
}
}
else {
typename = TEXT("not executable");
}