gdb - поиск значений функции strncmp () - PullRequest
0 голосов
/ 31 октября 2019

У меня есть код, который вызвал ошибку сегмента с помощью strncmp (), и у меня есть эта информация ниже:

#7  0x00007f3662e5d4e7 in __strncmp_sse42 () from /lib64/libc.so.6
(gdb) info locals
No symbol table info available.
(gdb) info args
No symbol table info available.
(gdb) info frame
Stack level 7, frame at 0x7f35f4413b70:
 rip = 0x7f3662e5d4e7 in __strncmp_sse42; saved rip = 0x7f35f64f5d6d
 called by frame at 0x7f35f4413cc0, caller of frame at 0x7f35f4413b68
 Arglist at 0x7f35f4413b60, args:
 Locals at 0x7f35f4413b60, Previous frame's sp is 0x7f35f4413b70
 Saved registers:
  rip at 0x7f35f4413b68

Есть ли способ проверить аргументы, переданные в эту функцию? Любое объяснение поможет мне объяснить, что происходит.

Заранее признателен за помощь.

Ответы [ 2 ]

1 голос
/ 01 ноября 2019

Вы не указываете, какую операционную систему вы используете, но попробуйте установить символы отладки для libc. Например, libc6-dbg в Ubuntu / Debian.

1 голос
/ 31 октября 2019

Одним из способов отследить аргументы, передаваемые в системные вызовы, является использование ltrace. Не всегда гарантированно будет полезным, но быстро и безболезненно. Вот пример использования ltrace для отслеживания вызовов, сделанных определенным вызовом команды grep:

$ ltrace -s 200   grep XYZ hello.cc  2>&1 | grep XYZ
memcpy(0xe7f030, "XYZ\0", 4)                     = 0xe7f030
memchr("XYZ", '\n', 3)                           = nil
memcpy(0xe7f6b0, "XYZ", 3)                       = 0xe7f6b0
strlen("XYZ")                                    = 3
strncmp("Y", "XYZ", 3)                           = 1
strncmp("XYZ", "Y", 1)                           = -1
strlen("XYZ")                                    = 3
strcmp("XYZ", "XYZ")                             = 0
strlen("XYZ")                                    = 3
memcpy(0xe7f630, "XYZ\0", 4)                     = 0xe7f630
strlen("XYZ")                                    = 3
memcpy(0xe7f840, "XYZ", 3)                       = 0xe7f840
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...