簡體   English   中英

無法訪問內存 - gdb

[英]Cannot access memory - gdb

這是我的禁用代碼:

Dump of assembler code for function main:
0x00000000000006b0 <+0>:    push   %rbp
0x00000000000006b1 <+1>:    mov    %rsp,%rbp
0x00000000000006b4 <+4>:    sub    $0x10,%rsp
0x00000000000006b8 <+8>:    movl   $0xa,-0xc(%rbp)
0x00000000000006bf <+15>:   lea    -0xc(%rbp),%rax
0x00000000000006c3 <+19>:   mov    %rax,-0x8(%rbp)
0x00000000000006c7 <+23>:   lea    0x96(%rip),%rdi        # 0x764
0x00000000000006ce <+30>:   mov    $0x0,%eax
0x00000000000006d3 <+35>:   callq  0x560 <printf@plt>
0x00000000000006d8 <+40>:   mov    $0x0,%eax
0x00000000000006dd <+45>:   leaveq 
0x00000000000006de <+46>:   retq 

當我通過 b *0x00000000000006b4 在 0x06b4 設置斷點並運行代碼時,它給出了錯誤Starting program: /root/print.out Warning: Cannot insert breakpoint 4. Cannot access memory at address 0x6b4但是當我使用b 4執行此操作時並運行代碼,它工作正常。 那么在第一種情況下我做錯了什么。

Dump of assembler code for function main: 0x00000000000006b0 <+0>: push %rbp 0x00000000000006b1 <+1>: mov %rsp,%rbp

您正在查看與位置無關的可執行文件(一種特殊的共享庫)。 當可執行文件開始運行時, main的代碼被重定位到不同的地址。

因為一旦可執行文件被重新定位, 0x6b4處就沒有代碼,GDB 抱怨它無法在那里設置斷點。

但是當我用 b 4 做它並運行代碼時,它工作正常。

在這種情況下,GDB 知道您要在第 4 行設置斷點,並在可執行文件重新定位插入適當的斷點。

使用info break來查看重定位的地址是什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM