我想知道如何在不运行可执行文件的情况下测试可执行文件。
我正在尝试编写一个返回布尔值的函数,该函数指示程序是否将运行。
我的问题是,运行无法运行的程序会导致Windows错误消息“ 16位应用程序与Windows的64位版本不兼容”,这根本不是所希望的。
我需要有关如何修改代码以编程方式而不是手动跳过消息的建议(按OK关闭弹出窗口太慢)。
我目前的代码:
try
{
Process.Start(exePath);
return true;
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
return false;
}
我希望这个错误会在99.9%的时间内出现,因为我的代码旨在反复测试随机生成的可执行文件,直到其中一个可执行为止。
假设16位程序永远不会运行,则可以读取exe标头并确定它是否是PE映像。如果没有,甚至不要尝试运行它。以下是exe文件的十六进制转储。0x3c处的字节是PE标头的偏移量。如果您再看那里,应该会看到e0。现在,在偏移量e0处,您将找到字母“ PE”。
00000000 4d 5a 90 00 03 00 00 00 04 00 00 00 ff ff 00 00 |MZ..............|
00000010 b8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 |........@.......|
00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000030 00 00 00 00 00 00 00 00 00 00 00 00 e0 00 00 00 |................|
00000040 0e 1f ba 0e 00 b4 09 cd 21 b8 01 4c cd 21 54 68 |........!..L.!Th|
00000050 69 73 20 70 72 6f 67 72 61 6d 20 63 61 6e 6e 6f |is program canno|
00000060 74 20 62 65 20 72 75 6e 20 69 6e 20 44 4f 53 20 |t be run in DOS |
00000070 6d 6f 64 65 2e 0d 0d 0a 24 00 00 00 00 00 00 00 |mode....$.......|
00000080 2e 1c ae 49 6a 7d c0 1a 6a 7d c0 1a 6a 7d c0 1a |...Ij}..j}..j}..|
00000090 6a 7d c1 1a e2 7d c0 1a 1c e0 bb 1a 65 7d c0 1a |j}...}......e}..|
000000a0 1c e0 bd 1a 6b 7d c0 1a 1c e0 ad 1a 77 7d c0 1a |....k}......w}..|
000000b0 a9 72 9e 1a 6b 7d c0 1a 1c e0 b8 1a 6b 7d c0 1a |.r..k}......k}..|
000000c0 52 69 63 68 6a 7d c0 1a 00 00 00 00 00 00 00 00 |Richj}..........|
000000d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000000e0 50 45 00 00 64 86 04 00 30 04 ba 49 00 00 00 00 |PE..d...0..I....|
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句