所以问题是:如何使用标准 C 库以跨平台的方式实现简单的自检可执行文件?
在这里,我正在寻找技术,而不是特定的检查方法(如 CRC 或哈希码),但该技术可能包含更适合某些方法的元素(例如见下文)。
目的是提供一种方法来指示二进制文件很可能由于某些病毒的操作或传输失败而被破坏,并且可能无法按预期执行。它并非旨在防止故意篡改目标,尤其是相关可执行文件。
它应该是合理的跨平台。理想情况下,它应该只使用标准 C 库,但如果不能通过外部条件编译实现,则能够在大多数使用的系统(Linux 变体、Android、Mac OS、Windows)上运行的方法也可能适用。
我目前的想法是简单地打开二进制文件以使用标准文件 I/O 进行只读,使用传递给程序的第一个参数 (argv),它是启动的可执行文件的名称,并对与位置无关的检查算法应用一些校验码。(简单校验和通过提供一个其他未使用的位置来使完整二进制的总和为零来满足此要求。也可以使用 CRC 算法,但在二进制的任意点插入合适的值并不是那么简单)
即使这种技术也可能失败,尽管 argv[0] 中的信息可能足以始终可靠地找到可执行文件本身的二进制文件。