gpt4 book ai didi

c - 共享库中的 gdb 断点不起作用

转载 作者:行者123 更新时间:2023-11-30 16:56:41 25 4
gpt4 key购买 nike

所以,我有以下 c 程序:

#include <stdio.h>
#include <string.h>

int main(){
char arr[20];
//this is line 6
strcpy(arr,"Hello, world!\n");
printf(arr);
}

我使用以下命令编译它:

gcc -g t2.c -o a2.out

之后,我将其加载到 gdb 中,并尝试在第 6 行、strcpy 函数和第 8 行设置断点。果然,在 strcpy 处设置断点时,我收到以下消息:“在未来的共享库上设置断点挂起负载?(y 或 [n])”。我回答“y”并得到“断点 2 (strcpy) 待处理。”。

回答 yes 并运行程序后,断点 2 永远不会被解析,调试器直接跳转到 printf 处的断点 3。

我在调试器中使用英特尔语法。除此之外没有自定义设置。谁能告诉我为什么 strcpy 处的断点从未被解析吗?

最佳答案

gcc 等编译器非常熟悉 strcpy 等字符串函数的语义。在 x86-64 上,使用您的示例,gcc 9 正在生成内联汇编,而不是 strcpy 调用,即使在-O0。该断点应该适用于大多数其他函数。

使用 gcc-9 生成的 x86-64 反汇编(无 strcpy 调用):

    0000000000000000 <main>:
0: 48 83 ec 28 sub rsp,0x28
4: 48 b8 48 65 6c 6c 6f 2c 20 77 movabs rax,0x77202c6f6c6c6548
e: bf 01 00 00 00 mov edi,0x1
13: 48 89 04 24 mov QWORD PTR [rsp],rax
17: b8 21 0a 00 00 mov eax,0xa21
1c: 48 89 e6 mov rsi,rsp
1f: 66 89 44 24 0c mov WORD PTR [rsp+0xc],ax
24: 31 c0 xor eax,eax
26: c7 44 24 08 6f 72 6c 64 mov DWORD PTR [rsp+0x8],0x646c726f
2e: c6 44 24 0e 00 mov BYTE PTR [rsp+0xe],0x0
33: e8 00 00 00 00 call 38 <main+0x38> 34: R_X86_64_PLT32 __printf_chk-0x4
38: 31 c0 xor eax,eax
3a: 48 83 c4 28 add rsp,0x28
3e: c3 ret

关于c - 共享库中的 gdb 断点不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39839356/

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