У меня есть строковый литерал в моей программе, я пытаюсь создать любительскую контрольную сумму, чтобы гарантировать, что строковый литерал не был заменен в переносном исполняемом файле.Трюк, чтобы предотвратить компилятор от постоянного сгибания выражения
Для этого я создаю хэш строкового литерала и сохраняю его как целочисленный литерал в программе. Теперь у меня есть два литерала: один для строки и один для хэша.
В моем коде я реализую контрольную сумму с помощью функции, которая хэширует строковый литерал таким же образом, я создаю новый хеш времени выполнения и проверяю этот хэш на хеш-литерал.
Проблема заключается в том, что с оптимизацией компилятора он может предварительно вычислить хеш времени выполнения, а затем im проверить литерал хэша против хеш-литерала, и контрольная сумма всегда вернет true.
Итак, я ищу трюк, чтобы заставить компилятор думать, что строковый литерал - это динамическая строка, которая может быть чем угодно, так что она не будет делать постоянной оптимизации сгибания во время выполнения хеша, и мой код будет работать правильно.
Используйте функцию для вычисления хэша, поставьте строку в качестве параметра. – wimh
@Wimmel, вы думаете, что компиляторы не оптимизируются между вызовами? Ха-ха. – rightfold
@elyse, и если функция находится в отдельной единице компиляции? Или линкер также может оптимизировать это? – wimh