如何在不实际运行可执行文件的情况下对其进行测试
本文关键字:测试 情况下 不实际 运行 可执行文件 | 更新日期: 2023-09-27 18:36:44
我想知道如何在不运行可执行文件的情况下测试可执行文件。
我正在尝试编写一个返回布尔值的函数,指示程序是否会运行。
我遇到的问题是运行一个无法运行的程序会导致 windows 错误消息"16 位应用程序与此 64 位版本的 Windows 不兼容",这根本不是可取的。
我需要有关如何修改代码以编程方式跳过消息而不是手动跳过消息的建议(按 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....|