gpt4 book ai didi

c++ - gdb - 查找 strncmp() 函数的值

转载 作者:太空宇宙 更新时间:2023-11-04 07:43:31 42 4
gpt4 key购买 nike

我有一个代码遇到了 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

有没有办法检查传递给这个函数的参数?任何解释都将帮助我了解正在发生的事情。

提前感谢您的帮助。

最佳答案

跟踪传递给系统调用的参数的一种方法是使用 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

关于c++ - gdb - 查找 strncmp() 函数的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58645075/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com