GDB disassembly address different when adding breakpoint

0

Here is my function with line numbers


8 |  void function(char* string) {
9 |       char buffer[16];
10|      strcpy(buffer,string); 
11|  }

Here is gdb disassemble function output

0x000011d4 <+0>:    push   %ebp
0x000011d5 <+1>:    mov    %esp,%ebp
0x000011d7 <+3>:    push   %ebx
0x000011d8 <+4>:    sub    $0x14,%esp
0x000011db <+7>:    call   0x123d <__x86.get_pc_thunk.ax>
0x000011e0 <+12>:   add    $0x2e20,%eax
0x000011e5 <+17>:   sub    $0x8,%esp           <---- I want Break point here
0x000011e8 <+20>:   pushl  0x8(%ebp)
0x000011eb <+23>:   lea    -0x18(%ebp),%edx
0x000011ee <+26>:   push   %edx
0x000011ef <+27>:   mov    %eax,%ebx
0x000011f1 <+29>:   call   0x1030 <strcpy@plt>
0x000011f6 <+34>:   add    $0x10,%esp
0x000011f9 <+37>:   nop
0x000011fa <+38>:   mov    -0x4(%ebp),%ebx
0x000011fd <+41>:   leave  
0x000011fe <+42>:   ret    

If I set break point at 0x000011e5 using the following command,

(gdb) b *0x000011e5

and run the program, gdb ignores all breakpoints and exits.

But, if I specify,
b 9, it works.
Here is the output

(gdb) b 10
Breakpoint 1 at 0x4011e5: file hello.c, line 10.

Why are the address different ?

gdb
disassembly

1 Answer

1

Why are the address different

Because you have a position-independent executable, which is linked at address 0, but relocated to a different address at runtime.

answered on Stack Overflow Apr 29, 2021 by Employed Russian

User contributions licensed under CC BY-SA 3.0