Странный сбой в программе CLinux

Anonymous
Странный сбой в программе C

Сообщение Anonymous »

У нас есть сервис (написанная в C), развернутая в нескольких случаях в среде AWS EC2. Мы видели несколько сбоев в 2 конкретных экземплярах, где обратная промышленность в дампе ядра показывает, что он сбои при вызове нулевого обратного вызова. < /P>
Исходный код выглядит так: < /p>

Код: Выделить всё

if (cb != NULL) {
cb(arg);
}
/* continue */
Код сборки, переведенный Disassemble Command в GDB показывает:
: test %rax,%rax
: je 0xNNN
: mov %rbp,%rdi
: callq *%rax 0xNNN: mov %rbp,%rdi
< /code>
Мы также проверили информацию регистрации и получили: < /p>
(gdb) info registers rax
rax 0x0 0
(gdb) info registers rip
rip 0x0 0x0
< /code>
Так что звучит так, как будто он сбои при вызове функции с помощью нулевого адреса, но нулевая проверка прямо перед вызовом. Логика кода может быть выполнена на всех развернутых экземплярах, но она всегда вылетает на 2 из них. Я никогда не видел подобную проблему в течение десятилетий в качестве разработчика C. У нас заканчиваются идеи, и, пожалуйста, проливайте некоторые огни на это на случай, если у вас есть похожий опыт.>

Подробнее здесь: https://stackoverflow.com/questions/794 ... -c-program

Вернуться в «Linux»