title: GDB Cannot insert breakpoint, Cannot access memory at address XXX?
body: <p>I wrote a really simple program:</p>
  
  <pre><code>ebrahim@ebrahim:~/test$ cat main.c
  int main() {
      int i = 0;
      return i;
  }
  </code></pre>
  
  <p>And the I compiled it with <code>-s</code> for <em>stripped</em> mode:</p>
  
  <pre class="lang-none prettyprint-override"><code>ebrahim@ebrahim:~/test$ gcc -s main.c -o f3
  ebrahim@ebrahim:~/test$ file f3
  f3: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=4dc6b893fbae8b418ca41ddeef948df1fcb26d3d, stripped
  </code></pre>
  
  <p>Now, I'm trying to find out the main function start address using GDB:</p>
  
  <pre class="lang-none prettyprint-override"><code>ebrahim@ebrahim:~/test$ gdb -nh f3
  GNU gdb (Ubuntu 7.11.90.20161005-0ubuntu2) 7.11.90.20161005-git
  Copyright (C) 2016 Free Software Foundation, Inc.
  License GPLv3+: GNU GPL version 3 or later &lt;http://gnu.org/licenses/gpl.html&gt;
  This is free software: you are free to change and redistribute it.
  There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
  and "show warranty" for details.
  This GDB was configured as "x86_64-linux-gnu".
  Type "show configuration" for configuration details.
  For bug reporting instructions, please see:
  &lt;http://www.gnu.org/software/gdb/bugs/&gt;.
  Find the GDB manual and other documentation resources online at:
  &lt;http://www.gnu.org/software/gdb/documentation/&gt;.
  For help, type "help".
  Type "apropos word" to search for commands related to "word"...
  Reading symbols from f3...(no debugging symbols found)...done.
  </code></pre>
  
  <p>As there is no <em>Symbol</em> info inside the file, I need to put a break at the file entry point and the disassemble it and find the start address of <code>main</code> function. So I used <code>info file</code> command to find the file <code>entry point</code> address:</p>
  
  <pre class="lang-none prettyprint-override"><code>(gdb) info file
  Symbols from "/home/ebrahim/test/f3".
  Local exec file:
      `/home/ebrahim/test/f3', file type elf64-x86-64.
      Entry point: 0x530     &lt;&lt;&lt;&lt;=============
      0x0000000000000238 - 0x0000000000000254 is .interp
      0x0000000000000254 - 0x0000000000000274 is .note.ABI-tag
      0x0000000000000274 - 0x0000000000000298 is .note.gnu.build-id
      0x0000000000000298 - 0x00000000000002b4 is .gnu.hash
      0x00000000000002b8 - 0x0000000000000360 is .dynsym
      0x0000000000000360 - 0x00000000000003f1 is .dynstr
      0x00000000000003f2 - 0x0000000000000400 is .gnu.version
      0x0000000000000400 - 0x0000000000000420 is .gnu.version_r
      0x0000000000000420 - 0x00000000000004f8 is .rela.dyn
      0x00000000000004f8 - 0x000000000000050f is .init
      0x0000000000000510 - 0x0000000000000520 is .plt
      0x0000000000000520 - 0x0000000000000528 is .plt.got
      0x0000000000000530 - 0x00000000000006e2 is .text
      0x00000000000006e4 - 0x00000000000006ed is .fini
      0x00000000000006f0 - 0x00000000000006f4 is .rodata
      0x00000000000006f4 - 0x0000000000000728 is .eh_frame_hdr
      0x0000000000000728 - 0x000000000000081c is .eh_frame
      0x0000000000200de0 - 0x0000000000200de8 is .init_array
      0x0000000000200de8 - 0x0000000000200df0 is .fini_array
      0x0000000000200df0 - 0x0000000000200df8 is .jcr
      0x0000000000200df8 - 0x0000000000200fb8 is .dynamic
      0x0000000000200fb8 - 0x0000000000201000 is .got
      0x0000000000201000 - 0x0000000000201010 is .data
      0x0000000000201010 - 0x0000000000201018 is .bss
  </code></pre>
  
  <p>As we expected the entry point is the start of <code>.text</code> section. So I put a breakpoint on this address:</p>
  
  <pre class="lang-none prettyprint-override"><code>(gdb) b *0x0000000000000530
  Breakpoint 1 at 0x530
  (gdb) r
  Starting program: /home/ebrahim/test/f3 
  Warning:
  Cannot insert breakpoint 1.
  Cannot access memory at address 0x530
  
  (gdb)
  </code></pre>
  
  <p>The question is why GDB cannot insert this breakpoint?</p>