Я использую GNU GDB (GDB) 8,3 на Kali Linux Rolling 2019.2. У меня есть следующий код C
#include <stdlib.h>
#include <string.h>
int main(int argc, char **argv) {
int x = 5;
int y = 3;
}
И сборка
Dump of assembler code for function main:
0x0000000000001125 <+0>: push rbp
0x0000000000001126 <+1>: mov rbp,rsp
0x0000000000001129 <+4>: mov DWORD PTR [rbp-0x14],edi
0x000000000000112c <+7>: mov QWORD PTR [rbp-0x20],rsi
0x0000000000001130 <+11>: mov DWORD PTR [rbp-0x4],0x5
0x0000000000001137 <+18>: mov DWORD PTR [rbp-0x8],0x3
0x000000000000113e <+25>: mov eax,0x0
0x0000000000001143 <+30>: pop rbp
0x0000000000001144 <+31>: ret
End of assembler dump.
Когда я ломаюсь по адресу памяти, программа останавливается.
(gdb) break *0x0000000000001130
Breakpoint 1 at 0x1130
(gdb) r
Starting program: /root/Documents/soQuestionProgram
[1]+ Stopped gdb soQuestionProgram
Однако, когда я прерываюсь по тому же адресу памяти, используя смещение main
, точка останова работает.
(gdb) break *main+11
Breakpoint 1 at 0x1130
(gdb) r
Starting program: /root/Documents/soQuestionProgram
Breakpoint 1, 0x0000555555555130 in main ()
Почему это происходит, и как я могу заставить взлом по адресу памяти работать?