Как стать автором
Обновить
0
0

Data Engineer

Отправить сообщение
Всё ещё проще, volatile в сигнатуре функции (именно на память):

void xor_cipher_free(xor_cipher_ctx* volatile ctx)
{
    memset(ctx->key, 0xFF, XOR_CIPHER_KEY_SIZE);
    free(ctx);
}


Работает на GCC 7.3 -O2 и -O3.
Здравствуйте, статья актуальна, но к сожалению, на первых строчках есть ошибки к примеру:
void xor_cipher_free(xor_cipher_ctx *ctx)
{
    memset(ctx->key, 0xFF, XOR_CIPHER_KEY_SIZE);
    free(ctx);
}

При компиляции с помощью GCC при оптимизации -O2 memset будет вырезан и таким образом Ваше «затирание» памяти не произойдёт. Такого рода вещи очень важны при разработке крипто-модулей.

Вот подтверждение (результаты дизассемблирования), компиляция с помощью GCC 7.3 -O2:
xor_cipher_allocate():
  mov esi, 16
  mov edi, 1
  jmp calloc
xor_cipher_free(xor_cipher_ctx*):
  jmp free
main:
  xor eax, eax
  ret


Могу порекомендовать вот этот сайт для подобных экспериментов.

Небольшая неточность, Вы забыли преобразование типов (это мелочь), calloc возвращает void*.
xor_cipher_ctx *cipher = calloc(1, sizeof(xor_cipher_ctx));

Видите-ли тут проблема не в том, что у товарища два контроллера, у меня к примеру, один, но та же проблема, при включении система (Windows 10) не видит контроллера, и помогает вынуть/всунуть кредл. А так всё работает ОК, мы с другом играли в два контроллера без проблем.
Ещё, что нового увидел это версия GCC по умолчанию 5.3.1 (на 15.10 у меня была 5.2). После установки столкнулся с проблемой, что отсутствует “menu bar” и “dash” и не работал привычный ALT+CTRL+T. Оказалось, что отключился Unity Plugin. Для тех, кто столкнётся или столкнулся с таким то на помощь придёт:
> sudo apt-get install compizconfig-settings-manager
> ccsm
После чего запустится графическая утилитка где надо будет включить Unity Plugin.

(делал всё на Virtualbox 5.0.18 Ubuntu 15.10)

Информация

В рейтинге
Не участвует
Откуда
Рига, Латвия, Латвия
Дата рождения
Зарегистрирован
Активность