No se pueden insertar puntos de interrupción. Dirección con valores bajos
Estoy tratando de depurar este sencillo programa en C:
#include <stdio.h>
int main(int argc, char *argv[]) {
printf("Hello\n");
}
Pero cuando desarmo la función principal me sale esto:
(gdb) disas main
Dump of assembler code for function main:
0x000000000000063a <+0>: push rbp
0x000000000000063b <+1>: mov rbp,rsp
0x000000000000063e <+4>: sub rsp,0x10
0x0000000000000642 <+8>: mov DWORD PTR [rbp-0x4],edi
0x0000000000000645 <+11>: mov QWORD PTR [rbp-0x10],rsi
0x0000000000000649 <+15>: lea rdi,[rip+0x94] # 0x6e4
0x0000000000000650 <+22>: call 0x510 <puts@plt>
0x0000000000000655 <+27>: mov eax,0x0
0x000000000000065a <+32>: leave
0x000000000000065b <+33>: ret
End of assembler dump.
Y esto ya es bastante extraño porque las direcciones comienzan con un prefijo de 4 ... para ejecutables de 32 bits y 8 ... para ejecutables de 64 bits, creo.
Pero pasando, entonces pongo un punto de interrupción:
(gdb) b *0x0000000000000650
Breakpoint 1 at 0x650
Lo ejecuto y recibo este mensaje de error:
Warning:
Cannot insert breakpoint 1.
Cannot access memory at address 0x650