Не удается получить доступ к памяти – gdb

Вот мой код disas:

Dump of assembler code for function main: 0x00000000000006b0 : push %rbp 0x00000000000006b1 : mov %rsp,%rbp 0x00000000000006b4 : sub $0x10,%rsp 0x00000000000006b8 : movl $0xa,-0xc(%rbp) 0x00000000000006bf : lea -0xc(%rbp),%rax 0x00000000000006c3 : mov %rax,-0x8(%rbp) 0x00000000000006c7 : lea 0x96(%rip),%rdi # 0x764 0x00000000000006ce : mov $0x0,%eax 0x00000000000006d3 : callq 0x560  0x00000000000006d8 : mov $0x0,%eax 0x00000000000006dd : leaveq 0x00000000000006de : retq 

когда я устанавливаю точку останова на 0x06b4 на b * 0x00000000000006b4 и запускаю код, он дает ошибку. 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 после 0x6b4 исполняемого файла, GDB жалуется, что он не может установить там 0x6b4 останова.

но когда я делаю это с b 4 и запускаю код, он работает нормально.

В этом случае GDB понимает, что вы хотите установить точку останова в строке 4 и вставляет соответствующую точку останова после того, как исполняемый файл был перемещен.

Используйте info break чтобы узнать, что такое перемещенный адрес.