#docker #gcc #debian #32bit-64bit #address-sanitizer
#докер #gcc #дистрибутив debian #32 бит-64 бит #адрес-дезинфицирующее средство
Вопрос:
Я пытаюсь использовать средство очистки адресов из GCC 8.3.0 в 32-разрядном контейнере debian buster docker, но продолжаю биться головой о стену при запуске исполняемого файла:
==17738==Shadow memory range interleaves with an existing memory mapping. ASan cannot proceed correctly. ABORTING. ==17738==ASan shadow was supposed to be located in the [0x1ffff000-0x3fffffff] range. ==17738==Process memory map follows: 0x29414000-0x295f3000 ... 0x5762d000-0x57a9c000 0xfff26000-0xfff47000 [stack] ==17738==End of process memory map.
Как вы, возможно, сможете заметить, здесь, похоже, нет перекрытия. И версия ядра 5.11.0-41-generic, похоже, не имеет проблем, о которых сообщали другие люди с аналогичными симптомами.
Тот же двоичный файл безупречно работает в 64-разрядной системе Ubuntu, но 32-разрядный контейнер debian buster docker (И 64 — разрядный образ debian docker) всегда выдает вышеуказанную ошибку. Средство очистки компилируется с-fsanitize=адресом и связано с-static-libasan в контейнере debian docker.
Другие люди указали, что запуск docker с —privileged —cap-add=SYS_PTRACE должен помочь, но это, похоже, не решает проблему.