Использование дезинфицирующего устройства адреса с верным - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь создать разделяемую библиотеку с JNI функциями с помощью дезинфицирующего средства GCC для использования в тестах.Поскольку сам jvm не построен с использованием синитизатора адресов, существует трюк LD_PRELOAD, чтобы заставить его работать так, как описано в этой проблеме .

Итак, я настроил maven-surefire-plugin следующим образом:

<configuration>
     <forkMode>always</forkMode>
     <environmentVariables>
           <LD_PRELOAD>/usr/lib/x86_64-linux-gnu/libasan.so.4.0.0</LD_PRELOAD>
     </environmentVariables>
</configuration>

Но mvn clean install по-прежнему аварийно завершает работу с SEGV следующим образом:

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
ASAN:DEADLYSIGNAL
=================================================================
==1225==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000000 

при сбое сборки.Из этого ответа Я пришел к выводу, что из-за того, что JVM использует сигналы для своих собственных целей, ожидается SEGV, вызванный чтением по нулевому адресу.

Есть ли способ обойти это?Может быть, безопасно просто игнорировать SEGV при работе с дезинфицирующими средствами, аналогичными при отладке JVM с gdb?

...