Если цель состоит в том, чтобы определить, изменился ли какой-либо код, то простым решением является проверка контрольной суммы кода (как при инициализации - или даже раньше, как перед загрузкой) и периодическая проверка того, что контрольная сумма кода не имеет измененное.
Тогда возникает проблема с обнаружением, не был ли взломан код проверки контрольной суммы.
Единственный раз, когда я потерпел поражение как хакер, был дорогой пакет с целевым кодом, использующим более пяти подпрограмм контрольной суммы, вызываемых из, казалось бы, случайных разных точек в коде. Это было больше проблем, чем стоило выяснить, как обойти это. Просто обязательно инициализируйте каждую из контрольных сумм, используя разные функции, но сделайте вызов инициализации трудным для отслеживания. Выполнение всех подряд во время инициализации позволяет легко победить.