Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
void xor_cipher_free(xor_cipher_ctx *ctx)
{
memset(ctx->key, 0xFF, XOR_CIPHER_KEY_SIZE);
free(ctx);
}
xor_cipher_allocate():
mov esi, 16
mov edi, 1
jmp calloc
xor_cipher_free(xor_cipher_ctx*):
jmp free
main:
xor eax, eax
ret
xor_cipher_ctx *cipher = calloc(1, sizeof(xor_cipher_ctx));
Проверил, при компиляции с -O3 "for" действительно вырезается.
Для Linux нашёл такой вариант надёжного мемсета:
void memset_s(void *v, int c, size_t n)
{
volatile unsigned char *p = (unsigned char*)v;
while(n--)
{
*p++ = c;
}
}Этот не вырезается даже на O3.
void xor_cipher_free(xor_cipher_ctx* volatile ctx)
{
memset(ctx->key, 0xFF, XOR_CIPHER_KEY_SIZE);
free(ctx);
}
void *(*volatile memset_s)(void *, int, size_t) = memset;А разве использование Crypto API из userspace не будет заведомо медленнее собственной реализации (да даже того же OpenSSL)? Ведь нужно копирование блоков в kernel-space и обратно.
Расширение и использование Linux Crypto API