vmovdqa выдает общую ошибку защиты
Я использую XTS_AES_256_enc_avx
а также XTS_AES_256_dec_avx
функции из библиотеки https://github.com/01org/isa-l_crypto. собрал их с помощью yasm
ассемблер
yasm -f elf64 -o XTS_AES_256_enc_avx.o XTS_AES_256_enc_avx.asm
yasm -f elf64 -o XTS_AES_256_dec_avx.o XTS_AES_256_dec_avx.asm
Как только эти файлы собраны, я связываю их с моим модулем, используя
mymod-y += mymod.c XTS_AES_256_dec_avx.o XTS_AES_256_enc_avx.o
У меня есть заголовочный файл, который объявляет эти функции как внешние функции и внутри c
-файл я называю эти функции. Но когда вызвано это порождает GPF
,
[Tue Sep 18 08:17:02 2018] general protection fault: 0000 [#1] SMP
[Tue Sep 18 08:17:02 2018] Modules linked in: .........[removed for readability]
[Tue Sep 18 08:17:02 2018] CPU: 1 PID: 1886 Comm: bash Tainted: G O 4.7.0+ #1
[Tue Sep 18 08:17:02 2018] Hardware name: Advantech SOM-5991/Default string, BIOS 5.11 12/12/2016
[Tue Sep 18 08:17:02 2018] task: ffff880858c8c240 ti: ffff8807ce230000 task.ti: ffff8807ce230000
[Tue Sep 18 08:17:02 2018] RIP: 0010:[<ffffffffa045f3ea>]
[<ffffffffa045f3ea>] XTS_AES_256_enc_avx+0x2a/0x3980 [mymod]
RIP [<ffffffffa045f3ea>] XTS_AES_256_enc_avx+0x2a/0x3980
Когда я разобрал код в GDB с помощью регистра RIP, я вижу, что ошибка происходит в
Дамп ассемблерного кода для функции XTS_AES_256_enc_avx
:
0x0000000000008f30 <+0>: sub $0x178,%rsp -> 8BYTE aligned
0x0000000000008f37 <+7>: mov %rbx,0x170(%rsp)
0x0000000000008f3f <+15>: mov $0x87,%r10
0x0000000000008f46 <+22>: vmovdqu (%rdx),%xmm1
0x0000000000008f4a <+26>: vpxor %xmm4,%xmm4,%xmm4
0x0000000000008f4e <+30>: vmovdqu (%rdi),%xmm0
0x0000000000008f52 <+34>: vpxor %xmm0,%xmm1,%xmm1
0x0000000000008f56 <+38>: vmovdqu (%rsi),%xmm2
**0x0000000000008f5a <+42>: vmovdqa %xmm2,0x80(%rsp)** -->>crash point.
vmovdqa
требует 16B
выравнивание, иначе это производит GPF
, Какой подход я могу предпринять, чтобы решить эту проблему GPF
?