hexadecimal para decimal..
BUUAAAAA.....pq q aki eu nunca gero um core dumped???? eu compilo o programa do um overflow (colocando uns 20 caracter onde soh podem 10) ai ele soh fala "Segmentation Fault", eu tenho q estorar a memoria de um intero pra gerar um core dump???? :oops:
hexadecimal para decimal..
hehehe calma calma SDM nao se desespere cara!!!
pra gerar um core eh facil
vc compila o programa da seguinte maneira..
[bash$ ]ulimit -c 1234567
[bash$ ] gcc -o programa programa.c
ae assim q vc der um segmentation fault ele vai gerar um core dump e ae vc analise o core.
eu analiso o core com o gdb
gdb programa
se vc kiser desassemblar o programa vc compila o mesmo da seguinte maneira..
[bash$ ] gcc -o programa -static -ggdb programa.c
soh nao me pergunte o pq doi 1234567 eu ainda nao sei estou procurando saber!
continuando...
ae vc entrando no gdb vc pode ver o seu programa em assembly
eh soh digitar no gdb:
por exemplo para desassemblar a main()
(gdb) desassemble main
para desassemblar a funcao exit() por exemplo
(gdb) desassemble _exit
para desassemblar a funcao execve por exemplo
(gdb) desassemble execve
.................
e assim por diante..espero q fike feliz em gerar um core..
ehehehe
[]'s
falooow cara ateh++
;-)
hexadecimal para decimal..
aaaa entao..falando a respeito da sua outra duvida q eu eskeci..
hehehe..
tipo tem varias maneiras de vc causar overflow (estourar a memoria, ultrapassar a quantidade de dados q sua variavel suporta).
tem, buffer overflow -> quando vc ultrapassa o buffer q seu caractere ou sua string pode suportar.
format string eh outra categoria de overflow - quando vc passa formatação de dados para uma string geralmente quando executa o programa. Essa tecnica geralmente eh aplicada quando vc tem um teste -> if(). para chegar o tamanho a quantidade de caracteres da string mas agora imagine a situacao.
char buffer[8] -> uma variavel do tipo char q suporta 8 caracteres.
ou aproximadamente 8 bytes = 64 bits.
agora vc faz a verificacao com strlen para verificar se a string tem realmente 8 caracteres.
int verifica = strlen(buffer);
o strlen vai atribuir o valor 8 ao verificacao. Mas por tras disso tudo a string buffer[8] vai ter um buffer dentro dela muito maior do q o suportado na realidade..
se vc fosse tentar passar pela verificacao da seguinte maneira
[bash@#] ./prog1 `perl -e 'print "A"x128'` ele nao passaria na verificacao do strlen()
mas agora no nosso segundo exemplo:
[bash@#] ./prog1 %pABC
provavelmente armazenou no buffer uma formatacao para ponteiro e entao o tamnho do buffer serah muito maior do q o suportado. passando pela checagem de strlen com apenas 4 caracteres e um argumento formatado (%p). Se nao ocorrer o segmentation fault eh apenas aumentar o tamanho da formatacao %p..
ficaria assim :
[bash@#] ./prog1 %8pABC
[bash@#] ./prog1 %14pABC
e assim por diante..
esse programinha abaixo vc pode gerar um segmentation fault por format string e gerar um overflow
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int
main(int argc, char *argv[]){
char buffer[8];
int verifica;
if(argc != 2)
{
printf("Sem trapaca\n"); /* apenas para nao haver trapaca */
exit(1);
}
verifica = strlen(argv[1]);
if(verifica <= 8)
{
printf("Ola..muito bem passou pela verificacao\n");
sprintf(buffer,argv[1]);
printf("seu buffer = %s\n",buffer);
}
else
printf("Tente novamente, vc ainda nao consegui estourar o buffer\n");
return 0;
}
alem dessas categorias de overflow ainda tem integer overflow, heap overflow e as q eu nao conheco..
espero ter ajudado..
falooow cara
ateh++
[]'s
hexadecimal para decimal..
q nada cara relaxa...pega nada!!!
;-)
faloow
[]'s
ateh++