AddressSanitizer: адрес переполнения кучи-буфера не совпадает с адресом теневых байтов - PullRequest
0 голосов
/ 08 января 2020

Я получил отчет от AddressSanitizer о переполнении буфера динамической памяти в адресе, но адреса, отображаемые в теневых байтах, не относятся к сообщенному.

ERROR: AddressSanitizer: heap-buffer-overflow on address <strong>0x6160000029a8</strong> at pc 0x7f585f1d646d bp 0x7ffff1ff3430 sp 0x7ffff1ff2bd8 READ of size 80 at <strong>0x6160000029a8</strong> ... Shadow bytes around the buggy address: <strong>0x0c2c7fff84e0</strong>: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa ...

Почему они отличаются? Это ошибка в AddressSanitizer?

1 Ответ

0 голосов
/ 08 января 2020

0x6160000029a8 обозначает неправильный адрес программы, к которому ваша программа пыталась получить доступ, тогда как 0x0c2c7fff84e0 - это адрес теневой памяти, который 0x6160000029a8 отображается на.

Иногда окружающие теневые байты (ИМХО редко) могут предоставить вам дополнительный контекст о проблемной области памяти c. Например, в вашем случае fa s означает «красную зону левой кучи», то есть зарезервированную область памяти до выделения кучи, которая используется для отслеживания переполнения кучи. Таким образом, ваше приложение, вероятно, пыталось получить доступ к памяти до некоторого буфера кучи (не обязательно, хотя большое переполнение памяти из-за предшествующего доступа к куче могло также упасть на тот же адрес).

...