Pull to refresh
0
0

Data Engineer

Send message
Всё ещё проще, 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)

Information

Rating
Does not participate
Location
Рига, Латвия, Латвия
Date of birth
Registered
Activity