如何解决Gdb待处理断点无法解析
我的系统是Debian 64位
我用c语言编写了一个简单的hello world程序
2 #include <string.h>
3
4 int main() {
5 char str_a[20];
6
7 strcpy(str_a,"Hello,world!\n");
8 printf(str_a);
9 }
使用
gcc -g -o char_array2 char_array2.c
并通过gdb -q ./char_array2
现在,当我尝试在这样的strcpy上设置断点时
(gdb) break strcpy
Function "strcpy" not defined.
Make breakpoint pending on future shared library load? (y or [n]) y
Breakpoint 2 (strcpy) pending.
(gdb)
尝试运行它,断点未解决,“ Hello world”被打印出来,程序终止。
按下运行键后应该发生发生了什么
Breakpoint 4,0xb7f076f4 in strcpy () from /lib/tls/i686/cmov/libc.so.6
现在,我已经在教32位系统上的汇编的书中阅读了此书,并且路径显示了/ i686 /,所以我怀疑由于使用64位处理器而导致缺少某种功能。我该如何解决?
解决方法
当我使用x686上的编译选项编译您的代码时,会得到以下提示:
leaq -32(%rbp),%rax
movabsq $8583909746840200520,%rdx
movq %rdx,(%rax)
movl $1684828783,8(%rax)
movw $2593,12(%rax)
movb $0,14(%rax)
注意,没有呼叫strcpy
。编译器已内联逻辑。使用-fno-builtin
,我得到了:
leaq -32(%rbp),%rax
leaq .LC0(%rip),%rsi
movq %rax,%rdi
call strcpy@PLT
.loc 1 8 16
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。