From 5e33085491e2cfe660f35f87c4fa320813c352f8 Mon Sep 17 00:00:00 2001 From: Blau Araujo Date: Mon, 28 Apr 2025 13:08:08 -0300 Subject: [PATCH] =?UTF-8?q?conte=C3=BAdo=20das=20partes=204=20e=205?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mods/04/README.org | 5 + mods/05/README.org | 231 ++++++++++++++++++++++++++++++++++ mods/05/exemplos/.gdb_history | 72 +++++++++++ mods/05/exemplos/iloop | Bin 0 -> 17128 bytes mods/05/exemplos/iloop.c | 12 ++ mods/05/exemplos/notinit | Bin 0 -> 17256 bytes mods/05/exemplos/notinit.c | 13 ++ mods/05/exemplos/segfault | Bin 0 -> 17144 bytes mods/05/exemplos/segfault.c | 8 ++ 9 files changed, 341 insertions(+) create mode 100644 mods/05/README.org create mode 100644 mods/05/exemplos/.gdb_history create mode 100755 mods/05/exemplos/iloop create mode 100644 mods/05/exemplos/iloop.c create mode 100755 mods/05/exemplos/notinit create mode 100644 mods/05/exemplos/notinit.c create mode 100755 mods/05/exemplos/segfault create mode 100644 mods/05/exemplos/segfault.c diff --git a/mods/04/README.org b/mods/04/README.org index b07a541..9a2668b 100644 --- a/mods/04/README.org +++ b/mods/04/README.org @@ -4,6 +4,11 @@ * 4. Aplicações em baixo e alto nível +** Objetivo + +Conhecer os recursos do GDB que podem auxiliar no desenvolvimento e +depuração de programas em assembly e em C/C++. + ** O GDB e a programação em baixo nível O GDB permite observar e controlar a execução de programas no nível mais próximo diff --git a/mods/05/README.org b/mods/05/README.org new file mode 100644 index 0000000..4d4a1dd --- /dev/null +++ b/mods/05/README.org @@ -0,0 +1,231 @@ +#+title: Curso prático de introdução ao GDB +#+author: Blau Araujo +#+email: blau@debxp.org + +* 5. Casos de uso + +** Objetivo + +Demonstrar o uso do GDB para localizar e solucionar bugs comuns, como: + +- Falha de segmentação; +- Variável não inicializada; +- Loop infinito; +- Índice de vetor inválido; +- Parâmetro incorreto na chamada de uma função; +- Registradores incorretos em uma chamada de sistema; +- Desalinhamento da pilha; +- Erro de empilhamento e desempilhamento de registros; +- Estouro de buffer; +- Estouro de pilha; +- Vazamento de memória. + +** Falha de segmentação + +Acesso inválido à memória causado por um ponteiro não inicializado. + +Código (=segfault.c=): + +#+begin_src c +#include + +int main() { + int *p = NULL; + *p = 42; // ERRO: tentativa de escrever em um ponteiro nulo + printf("%d\n", *p); + return 0; +} +#+end_src + +Compilação: + +#+begin_example +:~$ gcc -g -o segfault segfault.c +$ gdb ./segfault +Reading symbols from ./segfault... +#+end_example + +*** Processo de depuração + +Verificar o que acontece ao executar: + +#+begin_example +(gdb) r +Starting program: /home/blau/git/gdb-pratico/mods/05/exemplos/segfault +[Thread debugging using libthread_db enabled] +Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". + +Program received signal SIGSEGV, Segmentation fault. +0x000055555555514d in main () at segfault.c:5 +5 *p = 42; // ERRO: tentativa de escrever em um ponteiro nulo +#+end_example + +Matando o processo: + +#+begin_example +(gdb) k +[Inferior 1 (process 1034793) killed] +#+end_example + +Definindo =main= como ponto de parada e executando: + +#+begin_example +(gdb) b main +Breakpoint 5 at 0x555555555141: file segfault.c, line 4. +(gdb) r +Starting program: /home/blau/git/gdb-pratico/mods/05/exemplos/segfault +[Thread debugging using libthread_db enabled] +Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". + +Breakpoint 5, main () at segfault.c:4 +4 int *p = NULL; +#+end_example + +Listando variáveis locais antes e após a inicialização do ponteiro =p=: + +#+begin_example +(gdb) i locals +p = 0x7fffffffdf40 +(gdb) n +5 *p = 42; // ERRO: tentativa de escrever em um ponteiro nulo +(gdb) i locals +p = 0x0 +#+end_example + +O endereço de memória no ponteiro é claramente nulo (=0x0=)! + +** Variável não inicializada + +Uso de uma variável antes da atribuição de um valor (seu valor é lixo de memória). + +Código do exemplo (=notinit.c=): + +#+begin_src c +#include + +int main(void) { + + int a; // PROBLEMA: Variável não inicializada! + + printf("Digite um número: "); + scanf("%d", &a); // Se scanf falhar, o valor de a será lixo! + + printf("Depois de %d vem %d\n", a, a + 1); + + return 0; +} +#+end_src + +Compilação e teste: + +#+begin_example +:~$ gcc -g -o notinit notinit.c +:~$ ./notinit +Digite um número: (teclar CTRL+D) Depois de 32765 vem 32766 +#+end_example + +*** Processo de depuração + +Basta executar o programa passo a passo examinando o valor da variável =a=: + +#+begin_example +:~$ gdb ./notinit +Reading symbols from ./notinit... +(gdb) b main +Breakpoint 1 at 0x1151: file notinit.c, line 7. +(gdb) r +Starting program: /home/blau/git/gdb-pratico/mods/05/exemplos/notinit +[Thread debugging using libthread_db enabled] +Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". + +Breakpoint 1, main () at notinit.c:7 +7 printf("Digite um número: "); +(gdb) p a +$1 = 32767 +(gdb) n +8 scanf("%d", &a); // Se scanf falhar, o valor de a será lixo! +(gdb) n +Digite um número: 10 printf("Depois de %d vem %d\n", a, a + 1); +(gdb) p a +$2 = 32767 +(gdb) n +Depois de 32767 vem 32768 +12 return 0; +(gdb) c +Continuing. +[Inferior 1 (process 1039355) exited normally] +#+end_example + +Com o erro na execução de =scanf= (simulado com o atalho =CTRL+D=), o valor +da variável não inicializada continuou sendo lixo de memória (32767). + +** Loop infinito + +Uma condição de parada incorreta faz com que as repetições não tenham fim. + +Código de exemplo (=iloop.c=): + +#+begin_src c +#include + +int main() { + int i = 0; + + // A condição de parada nunca será atendida! + while (i < 100) { + printf("i = %d\n", i); + i *= 2; // Sempre zero! + } + return 0; +} +#+end_src + +Compilação e teste: + +#+begin_example +:~$ gcc -g -o iloop iloop.c +:~$ ./iloop +i = 0 +i = 0 +i = 0 +i = 0 +i = 0 +i = 0 +i = 0 +i = 0 +^C +#+end_example + +*** Processo de depuração + +#+begin_example +$ gdb ./iloop +Reading symbols from ./iloop... +(gdb) b main +Breakpoint 1 at 0x1141: file iloop.c, line 4. +(gdb) r +Starting program: /home/blau/git/gdb-pratico/mods/05/exemplos/iloop +[Thread debugging using libthread_db enabled] +Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". + +Breakpoint 1, main () at iloop.c:4 +4 int i = 0; +(gdb) n +7 while (i < 100) { +(gdb) p i +$1 = 0 +(gdb) n +8 printf("i = %d\n", i); +(gdb) n +i = 0 +9 i *= 2; // Sempre zero! +(gdb) p i +$2 = 0 +(gdb) n +7 while (i < 100) { +(gdb) p i +$3 = 0 +#+end_example + +Fica claro que o valor de nunca foi alterado, porque ~2 × 0 = 0~! + diff --git a/mods/05/exemplos/.gdb_history b/mods/05/exemplos/.gdb_history new file mode 100644 index 0000000..1cf4b08 --- /dev/null +++ b/mods/05/exemplos/.gdb_history @@ -0,0 +1,72 @@ +r +q +r +q +r +bt +b main +l +b 5 +r +info locals +k +r +info locals +c +del +l +b main +info locals +n +info locals +c +b main +del breakpoints +i breakpoints +b main +r +bt +i locals +n +i locals +info registers +q +b main +p a +r +p a +k +q +b main +p a +r +p a +n +n +p a +n +c +k +q +b main +r +n +n +p i +n +p i +c +k +del breakpoints +q +b main +r +n +p i +n +n +p 1 +p i +n +p i +q diff --git a/mods/05/exemplos/iloop b/mods/05/exemplos/iloop new file mode 100755 index 0000000000000000000000000000000000000000..09b45992ab87928ea2eb34218a68ccd0a83c6ea9 GIT binary patch literal 17128 zcmeHOYit}>6~43f#_QO%H%>z1q^(D70tsbz?Ziow6gTTQPS#Z(CJ#Z&V=~?y?@rm> zac5^6yR_8EeGsbB22gpZ@S}f-C@MvY5J(`oYDp<-t3*N~AV3yMq*Ty06)g%h&GMa@ zdp6_gx|NVX0?mn2}C=cpuyY?Ouk!dkY zb@AJmL8fq%{WniuKKFwYvrj#AQsk z^(QM*a!Cv6|J&yP#-HA$TDBD%CZp6b8YB|>P7IZnsCvbo?Aq$1LuBG zU1_$`)7v0*CyqUi#}E5>J0d{*GCHL1q|Fdv?~dJS#J#XH3tG=~q6z z?1HZ8luyrnpA2VwdUyPj8O{0hUO$qCw8vY(VpU*DE__F_{;Ihi?q*;$4R z-c5QL#AU#@w0_|nmnXvfnXl-~U8vO@@P6mJ67D<*>)s0Ew-(^`J)?FyV($)%6|-g z{H=`KsjSc7x)b%=N{Ydb_=Az5s}@yJA(BDV9{Suy-_husD-nI$@_#>bmEkRnKp25A z0$~Kg2!s&`BM?R)j6fKHFarNW5#arXyuXn54$>Y*qIQqfH#A-)Wk>E)?3Oa`V_YR= zUQ4Z%GVf=k^%oJ_-@aV4NPb3c9^^fT)3gW!@m|9-(!SVJi$^7IlYE8b%Oz(fVdA{p zzsPGi_UCmb?O!Ci+G8Rv3ugVOtQgmOR{CLcr%RmQJ2kI8P`a-8p6j+xm3Vv!c4dw; zmZ7d3m-c^1nd>dH|F1LNKOQW26K`yl2Ht?OI+X4(_nqF}aeuazsMNOW%tJQMF%$JRvO5v>(EZb?MA|w7$QHT0&l08FBl$>hW z7|0uC!#1-Jbvs)a@V2n4iM*N^*DF)yY{9n5R<)9-mXDa_T*9Gk+7(eRHCxba;Z}r- zaJPlaec)!%vL=#Qkt$dvBQ;jktEs%{r1H73#DuLoX4XoTtXw74yD?=<8l{P%RS~Ib z#ZH;!Y_Xa%M8(OOR8pbw1?idb4d@1RNtJkN&y*Fhh_X_@K3?~HJy zenR^=}|S!$6SQ z5fC+~gnX;3?-sH2eB)Z^n| zbc=YJH6Fi{^z<*K>dEqTDW;*1`UXy)--^{kfm8|1s&$0{{=y zk3&!O3Hm7vZ|^{V76-Dn)0ebx1VbM)HAl}2C@M~Md>lXG zE5|i7r=(@+z(xh0IZMkItuei*w!MRUMuvdKD5ni)q&2f+ zztDE=-nV^lx3+KR&I7{-wS$A(cMk&*Jk65k(<&cyLdD4GjxO9r$RjUxC>?Y`P+<2? zut1o9oJGr3EUloIb9B^YWFNe8W?8FNjGRCyaMQ*r6^WHcY;Zh=8%gJ88Xkt3e-LMW zbtr;DBr8)T4Bg<4?ePMq%9dj!^W|!C!nP(1+nEx{x@xRy;&79h6G@EjhCLx%$AVrd zh-7Z6j7&Z5*q-Gs!>*WCd7hxbW*bGF05UaEbSOtuEQw??Zz16rlekmYfRp9MIB67Q zXDH;52}`nmgWE^&Hp+V$d40sga~kF8B{Pf4SPqqgs?w87BE%wzURpxugU%SM<^j>m zd30$hn&oke)B4z$ZQR8Y4tg1!Mg%!YYCJdF|4aM#(ln2!NtHKgd++%>HIOY$CH#bq zkn`{hofBjXk6$bgB7q^IUj9PoJ=vdp{Y3A-zhf@V_2=~k^VQN>PP@Iyx-WwRNYmPa z@x1?b<2j7K_To}*iJ7-gb!g+O%)$fdF{w^$j zJpcc3UgFg{(n~Oo`67V*c%HAudOd%xCuhSrmT7)XI<7y@7gtDp(4Wfk(-K*}bg!Ej z-&5Ck3C1&DDe(a}ag)q2m@nhlf87H3yadwv#7{vy&HsZs@?YKOp&s&skq-I}Er5SY z;tL;u-zV|Gb}n7-0l&8Zp6hY@0{9 + +int main() { + int i = 0; + + // A condição de parada nunca será atendida! + while (i < 100) { + printf("i = %d\n", i); + i *= 2; // Sempre zero! + } + return 0; +} diff --git a/mods/05/exemplos/notinit b/mods/05/exemplos/notinit new file mode 100755 index 0000000000000000000000000000000000000000..d984d03c39f258245a857a071d3b52311b673736 GIT binary patch literal 17256 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 literal 0 HcmV?d00001 diff --git a/mods/05/exemplos/notinit.c b/mods/05/exemplos/notinit.c new file mode 100644 index 0000000..f812b7e --- /dev/null +++ b/mods/05/exemplos/notinit.c @@ -0,0 +1,13 @@ +#include + +int main(void) { + + int a; // PROBLEMA: Variável não inicializada! + + printf("Digite um número: "); + scanf("%d", &a); // Se scanf falhar, o valor de a será lixo! + + printf("Depois de %d vem %d\n", a, a + 1); + + return 0; +} diff --git a/mods/05/exemplos/segfault b/mods/05/exemplos/segfault new file mode 100755 index 0000000000000000000000000000000000000000..812cb73f481f1f6ec0834465605702cfbdca4e01 GIT binary patch literal 17144 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 literal 0 HcmV?d00001 diff --git a/mods/05/exemplos/segfault.c b/mods/05/exemplos/segfault.c new file mode 100644 index 0000000..e1adedc --- /dev/null +++ b/mods/05/exemplos/segfault.c @@ -0,0 +1,8 @@ +#include + +int main() { + int *p = NULL; // NULL = (void *)0 - Ponteiro nulo + *p = 42; // ERRO: tentativa de escrever em um ponteiro nulo + printf("%d\n", *p); + return 0; +}