Со следующим фрагментом кода:
typedef struct
{
char fileName[ 1024];
time_t deleteTime;
} file_item_t;
....
....
setEntry(char *fileName)
{
file_item_t file;
memset( &file, 0x00, sizeof( file_item_t ));
memcpy( file.fileName,
fileName,
sizeof( file.fileName ) - 1 );
...
...
Когда эта функция вызывается, она работает нормально на машине SPARC, но происходит сбой на i386, работающих под управлением Solaris 10.
fileName
это строка с нулевым символом в конце, скажем, около 30 символов.
Похоже, что попытка чтения за пределами диапазона fileName
с использованием memcpy()
вызывает ошибку сегментации в некоторых системах.
Это устаревший код, который легко исправить. Но то, что я хотел бы знать, о базовых характеристиках, которые могут привести к этому провалу или нет.
Это связано с нарушением чтения в стеке? Какой-то переход границы?
Это связано с сегментацией памяти и является случайностью (в зависимости от того, как сегментация / разбиение памяти выполняется управлением памятью и ОС), что он может дать сбой или нет.