Почему valgrind жалуется на прекрасно инициализированный буфер? - PullRequest
0 голосов
/ 13 января 2019

Это тестовый код "valgrind.c". Он инициализирует буфер в стеке, а затем выполняет простое сравнение строк.

#include <stdlib.h>   
#include <string.h>


int  main( void)
{
   char   buf[ 6];

   memset( buf, 'X', sizeof( buf));
   if( strncmp( buf, "XXXX", 4))
      abort();

   return( 0);
}

Я компилирую это с cc -O0 -g valgrind.c -o valgrind. Работает сам по себе, это нормально. Когда я запускаю его через valgrind --track-origins=yes ./valgrind, это дает мне:

==28182== Using Valgrind-3.13.0 and LibVEX; rerun with -h for copyright info
==28182== Conditional jump or move depends on uninitialised value(s)
==28182==    at 0x4E058CC: ??? (in /lib/x86_64-linux-gnu/libc-2.28.so)
==28182==    by 0x4CAA09A: ??? (in /lib/x86_64-linux-gnu/libc-2.28.so)
==28182==  Uninitialised value was created by a stack allocation
==28182==    at 0x4CA9FBD: ??? (in /lib/x86_64-linux-gnu/libc-2.28.so)

Это действительно не имеет смысла для меня. Я запускаю это на Ubuntu 18.10.

1 Ответ

0 голосов
/ 17 января 2019

Ответ был таков: библиотеки valgrind глючили. После полного dist-upgrade все теперь работает как положено. Хотя номер версии valgrind и исполняемого файла остаются прежними (мой текущий номер dpkg теперь 1: 3.13.0-2ubuntu6, я забыл записать старый, извините).

Это были открытые библиотеки с их шасумами. На самом деле есть разница в открытых библиотеках, и вы можете видеть, что libc и исполняемый файл test и valgrind неизменны в обоих сценариях:

Поврежденная:

41bd206c714bcd2be561b477d756a4104dddd2d3578040cca30ff06d19730d61  /etc/ld.so.cache
b0d9f1bc02b4500cff157d16b2761b9b2420151cc129de37ccdecf6d3005a1e0  /lib64/ld-linux-x86-64.so.2
b0d9f1bc02b4500cff157d16b2761b9b2420151cc129de37ccdecf6d3005a1e0  /lib/x86_64-linux-gnu/ld-2.28.so
701e316140eda639d651efad20b187a0811ea4deac0a52f8bcd322dffbb29d94  /lib/x86_64-linux-gnu/libc-2.28.so
701e316140eda639d651efad20b187a0811ea4deac0a52f8bcd322dffbb29d94  /lib/x86_64-linux-gnu/libc.so.6
38705bdbed45a77c2de28bedf5560d6ca016d57861bf60caa42255ceab8f076a  /tmp/valgrind
4652774bd116cb49951ef74115ad4237cad5021b2bd4d80002f09d986ec438b9  /usr/bin/valgrind
0369719ef5fe66d467a385299396bab0937002694ffc78027ede22c09d39abf3  /usr/lib/valgrind/default.supp
16b5f1e6ae25663620edb8f8d4a7f1a392e059d6cf9eb20a270129295548ffb2  /usr/lib/valgrind/memcheck-amd64-linux
6335747b07b2e8a6150fbfa777ade9bd80d56626bba9772d61c7d33328e68bda  /usr/lib/valgrind/vgpreload_core-amd64-linux.so
827b4c18aefad7788b6e654b1519d3caa1ab223cf7a6ba58d22d7ad7d383b032  /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so
38705bdbed45a77c2de28bedf5560d6ca016d57861bf60caa42255ceab8f076a  ./valgrind

Здоровые:

b0d9f1bc02b4500cff157d16b2761b9b2420151cc129de37ccdecf6d3005a1e0  /lib64/ld-linux-x86-64.so.2
b0d9f1bc02b4500cff157d16b2761b9b2420151cc129de37ccdecf6d3005a1e0  /lib/x86_64-linux-gnu/ld-2.28.so
701e316140eda639d651efad20b187a0811ea4deac0a52f8bcd322dffbb29d94  /lib/x86_64-linux-gnu/libc-2.28.so
701e316140eda639d651efad20b187a0811ea4deac0a52f8bcd322dffbb29d94  /lib/x86_64-linux-gnu/libc.so.6
38705bdbed45a77c2de28bedf5560d6ca016d57861bf60caa42255ceab8f076a  /tmp/valgrind
4652774bd116cb49951ef74115ad4237cad5021b2bd4d80002f09d986ec438b9  /usr/bin/valgrind
391826262f9dc33565a8ac0b762ba860951267e73b0b4db7d02d1fd62782f8c8  /usr/lib/debug/lib/x86_64-linux-gnu/ld-2.28.so
3ab1f160af6c3198de45f286dd569fad7ae976a89ff1655e955ef0544b8b5d6c  /usr/lib/debug/lib/x86_64-linux-gnu/libc-2.28.so
ae4ea44f87787b9b80d19a69ad287195dc7840eea08c08732d36d2ef1e6ecff3  /usr/lib/valgrind/default.supp
ba18f39979d22efc89340b839257f953a505ef5ca774b5bf06edd78ecb6ed86e  /usr/lib/valgrind/memcheck-amd64-linux
1649637bba73e84b962222f3756cc810c5413239ed180e0029cd98f069612613  /usr/lib/valgrind/vgpreload_core-amd64-linux.so
ab1501fa569e0185dea7248648255276ca965bbe270803dcbb930a22ea7a59b7  /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so
38705bdbed45a77c2de28bedf5560d6ca016d57861bf60caa42255ceab8f076a  ./valgrind

Спасибо за полезные комментарии, особенно от Флориана, которые поставили меня на правильный путь.

...