From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Paul Wolneykien To: ALT Linux Team development discussions Organization: ALT Linux Team Message-ID: <5d1faa4c-f21b-047b-b8e9-27d28109f0b0@altlinux.org> Date: Thu, 21 Feb 2019 16:17:07 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Language: ru Content-Transfer-Encoding: 8bit Subject: [devel] =?utf-8?b?bWVtY3B5INCz0LvRjtGH0LjRgiAo0LjQu9C4INGPINC9?= =?utf-8?b?0LUg0YPQvNC10Y4g0LXQs9C+INCz0L7RgtC+0LLQuNGC0Ywp?= X-BeenThere: devel@lists.altlinux.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: ALT Linux Team development discussions List-Id: ALT Linux Team development discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 21 Feb 2019 13:17:08 -0000 Archived-At: List-Archive: List-Post: Коллеги, прошу помощи разбором одной проблемы. Предполагаю, что это какая-то очевидная ошибка: то ли я действительно не умею готовить memcpy(), то ли где-то в программе есть ошибки при работе с памятью, которые влияют косвенно (может в данном случае такое быть?). Итак, у меня есть вот такой код¹ > 1460 if (_data.size % 2 && _data.data[8] == 0x04) { > 1461 // Uncompressed point (the first 8 bytes is the UKM) > 1462 memcpy (_data.data + 8, _data.data + 9, _data.size - 9); > 1463 _data.size--; > 1464 } после выполнения которого на Сизифе, я получаю копию массива данных за исключением 9-го (по счёту с 1) байта. Как и планировалось. Однако, если тот же самый бинарь запустить на машинке с p8, то получается неожиданный и странный эффект: 57-й байт заменяется копией 58-го. Вот как это выглядит (см. конец строки 0x4cc050 – начало строки 0x4cc058 во втором дампе): > (gdb) x/73ubfx _data.data > 0x4cc020: 0xdd 0x0a 0x35 0x80 0x51 0x13 0xed 0xdb > 0x4cc028: 0x04 0xd6 0x9b 0xa0 0x15 0x3b 0xa2 0x72 > 0x4cc030: 0x98 0x72 0xd0 0x2a 0x64 0x45 0x79 0x05 > 0x4cc038: 0x4e 0x0f 0x74 0x4e 0x70 0x07 0xa9 0x4f > 0x4cc040: 0x87 0x53 0xb4 0x55 0xd3 0xc6 0x81 0x48 > 0x4cc048: 0x90 0xbd 0xa1 0xff 0x28 0x7e 0x97 0x41 > 0x4cc050: 0x2a 0x6e 0xbf 0x5e 0xfc 0xa0 0xf4 0x2b > 0x4cc058: 0xcd 0x47 0x64 0x36 0x46 0xb0 0x02 0x7b > 0x4cc060: 0x11 0x03 0xe6 0x9c 0xed 0x94 0x43 0x50 > 0x4cc068: 0xdf > > (gdb) n > 1463 > > (gdb) x/73ubfx _data.data > 0x4cc020: 0xdd 0x0a 0x35 0x80 0x51 0x13 0xed 0xdb > 0x4cc028: 0xd6 0x9b 0xa0 0x15 0x3b 0xa2 0x72 0x98 > 0x4cc030: 0x72 0xd0 0x2a 0x64 0x45 0x79 0x05 0x4e > 0x4cc038: 0x0f 0x74 0x4e 0x70 0x07 0xa9 0x4f 0x87 > 0x4cc040: 0x53 0xb4 0x55 0xd3 0xc6 0x81 0x48 0x90 > 0x4cc048: 0xbd 0xa1 0xff 0x28 0x7e 0x97 0x41 0x2a > 0x4cc050: 0x6e 0xbf 0x5e 0xfc 0xa0 0xf4 0x2b 0x47 > 0x4cc058: 0x47 0x64 0x36 0x46 0xb0 0x02 0x7b 0x11 > 0x4cc060: 0x03 0xe6 0x9c 0xed 0x94 0x43 0x50 0xdf > 0x4cc068: 0xdf На других входных данных пока не пробовал. Зато пробовал на разных машинах с Сизифом и p8 — воспроизводится стабильно. Причём, один из Сизифов не самый новый. Однако на Сизифах работает, а на p8 — получаю паразитную копию того самого 57-го байта. Архитектуры везде x86_64. --- ¹ http://git.altlinux.org/gears/g/gnupg-pkcs11-scd.git?p=gnupg-pkcs11-scd.git;a=blob;f=gnupg-pkcs11-scd/gnupg-pkcs11-scd/command.c;h=6fd39a8ef70dede06e54c49ab86bdfc2c01e74c3;hb=6bda8fd5e3b3862edca3a38ac62c01477b6ab909#l1460