Существует ли в Linux какая-либо библиотека-эквивалентная функция SecureZeroMemory, специфичная для Windows (gcc 5.4)? - PullRequest
0 голосов
/ 04 декабря 2018

Мы написали код на C ++, который компилируется как в Windows, так и в Ubuntu.Я хочу использовать безопасную функцию memset_s для обнуления буферов в моем приложении.

В Windows и Ubuntu 16.04 нет определения макроса __STDC_LIB_EXT1__, поэтому я не могу использовать memset_s, предоставленный C++ 11.

В Windows у меня есть SecureZeroMemory, что предотвращает оптимизацию компилятора.В Ubuntu 16.04 (GCC версии 5.4) я ищу SecureZeroMemory эквивалентную библиотечную функцию (которая помешает оптимизации компилятора).

Будет очень полезно, если вы предложите мне библиотечную функцию в linux, конечный параметрручная реализация memset_s для платформы linux

Заранее спасибо

1 Ответ

0 голосов
/ 04 декабря 2018

Если вы хотите убедиться, что память обнулена и что эта операция не оптимизирована компилятором (из-за правила как-будто ), вы можете установить «барьер оптимизатора»:

void always_memset(void* dest,int ch,size_t count){
     memset(dest,ch,count);
     //Make the compiler believe that you are using memory
     //including memory referenced by dest
     asm volatile("" : : :"memory");//it is possible to be more subtle.

     }

Тогда memset_s может быть легко реализован путем вызова этой функции после проверки предварительных условий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...