Older blog entries for acs (starting at number 36)

Tutorial Basico de GDB

O post de hoje sera dedicado a esse famoso debugger do mundo UNIX e que pode ser utilizado em ambiente windows tambem, sim… vamos tratar do GNU Debugger ou GDB, software muito util para fazer analises e encontrar erros decorrentes em nossos programas.

Claro que a intenção desse post é ser bem basico, passando apenas informações necessarias para a iniciação, caso alguem queira saber mais, existe uma documentacao excelente, um exemplo disso e o livro Debugging with GDB

Entao chega de conversa e vamos ao que interessa..

Primeiro caso: Compilando para debugar

Iremos utilizar como exemplo, um programa que conta de 0 a 10, como queremos debugar esse programa, para isso utilizamos o seguinte comando

[jumpi@painkiller testes]$ gcc -g contador.c

Com esse comando geramos um arquivo de saida (a.out), que vai conter as informações necessarias para o debugging

Agora e hora de debugar, na linha de comando digitamos:

[jumpi@painkiller testes]$ gdb a.out
GNU gdb Red Hat Linux (6.5-15.fc6rh)
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type “show copying” to see the conditions.
There is absolutely no warranty for GDB. Type “show warranty” for details.
This GDB was configured as “i386-redhat-linux-gnu”…Using host libthread_db library “/lib/libthread_db.so.1″.

(gdb)

Com esse comando, entramos em modo de debugging e o gdb nos apresenta o prompt onde entramos com os comandos necessarios para o debugging.

Hora de definir o breakpoint: no gdb, podemos utilizar numero de linha ou ate mesmo o nome da funcao na qual se deseja inserir o breakpoint, no nosso caso vamos definir um breakpoint na funcao main com o seguinte comando

(gdb) break main
Breakpoint 1 at 0×8048395: file contador.c, line 7.
(gdb)

E agora rodamos o programa dentro do debugger com o seguinte comando

(gdb) run
Starting program: /home/jumpi/testes/a.out

Breakpoint 1, main () at contador.c:7
7 for (i=0; i<=10; i++) {
(gdb)

E ele para exatamente na linha onde foi inserido o breakpoint, no caso como definimos por funcao, entao ele para na primeira linha da funcao, numericamente falando, na linha 7

Agora temos 2 comandos que podemos utilizar para verificar as informacoes, step e next, no caso, step vai fazendo passo a passo, ou seja, linha por linha e o next é utilizado quando desejo passar por subrotinas, no nosso caso vamos utilizar o step e ver o que acontece

(gdb) step
8 printf(”Numero :%d\n”,i);
(gdb) step
Numero :0
7 for (i=0; i<=10; i++) {
(gdb) step
8 printf(”Numero :%d\n”,i);
(gdb) step
Numero :1

Ele vai executando cada passo da funcao solicitada, como estamos dentro de um laco, ele executa o laco ate o seu termino.

Suponha que eu quero verificar o valor da variavel no momento, nesse caso como eu possuo apenas a variavel i, vamos imprimir o seu valor, eu posso utilizar o comando print ou display da seguinte maneira

(gdb) print i
$1 = 4
(gdb) display i
1: i = 4
(gdb)

No caso, com print ele mostra a variavel temporaria que armazena o resultado e com display ele mostra a variavel definida pelo usuario no codigo.

Podemos setar tambem o valor das variaveis com o comando set variable da seguinte maneira

(gdb) set variable i=20
(gdb) display i
2: i = 20
(gdb)

Segundo caso: Utilizando o gdb para analisar coredumps

Coredumps sao arquivos que contem a informacao sobre um determinado erro gerado quando um programa e executado e utilizando o gdb podemos descobrir qual a anomalia do nosso programa

[jumpi@painkiller testes]$ gcc -g contador.c

[jumpi@painkiller testes]$ ./a.out
Numero :(null)
Segmentation fault (core dumped)
[jumpi@painkiller testes]$

Isso significa que o programa gerou um erro e um coredump foi criado, quando verificamos o conteudo do diretorio procurando por core

[jumpi@painkiller testes]$ ls core*
core.6180
[jumpi@painkiller testes]$

Verificamos que o core foi criado, agora vamos utiliza-lo para servir como base de informacao para o nosso debugging no gdb

[jumpi@painkiller testes]$ gdb a.out core.6180
GNU gdb Red Hat Linux (6.5-15.fc6rh)
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type “show copying” to see the conditions.
There is absolutely no warranty for GDB. Type “show warranty” for details.
This GDB was configured as “i386-redhat-linux-gnu”…Using host libthread_db library “/lib/libthread_db.so.1″.

warning: Can’t read pathname for load map: Input/output error.
Reading symbols from /lib/libc.so.6…done.
Loaded symbols for /lib/libc.so.6
Reading symbols from /lib/ld-linux.so.2…done.
Loaded symbols for /lib/ld-linux.so.2
Core was generated by `./a.out’.
Program terminated with signal 11, Segmentation fault.
#0 0×0077bf9b in strlen () from /lib/libc.so.6
(gdb)

Carregado o gdb com o arquivo de core, podemos utilizar o comando backtrace ou bt, para verificarmos as chamadas de funções e separarmos por frames

(gdb) bt
#0 0×0077bf9b in strlen () from /lib/libc.so.6
#1 0×0074e1ff in vfprintf () from /lib/libc.so.6
#2 0×007539c3 in printf () from /lib/libc.so.6
#3 0×080483b1 in main () at contador.c:7
(gdb)

Bem, no nosso caso eu verifico que tem um problema no frame 3, na linha 7, entao o comando frame seguido do numero do frame para verificar o que ocorre

(gdb) frame 3
#3 0×080483b1 in main () at contador.c:7
7 printf(”Numero :%s\n”,i);
(gdb)

E assim verifico que por descuido, coloquei um %s, onde era um %i… :)

Bem, utilizei apenas uma pequena fração para demonstrar do que o GDB é capaz, ele pode ser muito util para uma serie de outras coisas, sem contar que existem muitos outros detalhes mais especificos que nao foram abordados aqui nesse post, porem espero que seja util a vocês tambem… Ate a proxima!!! :)

No play: Cacophony - Speed Metal Symphony - 06: Desert Island

Syndicated 2007-07-24 04:19:59 from Jumpi's Notepad

Yes, nos tambem temos int 3!!!! (tecnicas antidebugging no linux)

Well, seguindo o embalo do meu amigo de trabalho, a.k.a. Vandeco, tambem tentarei mostrar aqui uma tecnica antidebugging, so que em um S.O. diferente… no nosso caso vamos fazer o teste no linux e vamos verificar que int 3 e usual, sim… nao tenho duvidas, porem nao basta para livrar o nosso codigo do debugging alheio…

Tentarei demonstrar de forma resumida um exemplo de como burlar o debug do gdb

Primeiro exemplo de codigo, introduzir um breakpoint falso

#include <signal.h>

void handler (int signo) {
}

int main() {

signal(handler, SIGTRAP);
__asm__(”int3″);
printf(”Ola!!”);
}

[jumpi@painkiller testes]$ gcc -g debug-teste.c
[jumpi@painkiller testes]$

[jumpi@painkiller testes]$ gdb
GNU gdb Red Hat Linux (6.5-15.fc6rh)
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type “show copying” to see the conditions.
There is absolutely no warranty for GDB. Type “show warranty” for details.
This GDB was configured as “i386-redhat-linux-gnu”.
(gdb) file a.out
Reading symbols from /home/jumpi/testes/a.out…done.
Using host libthread_db library “/lib/libthread_db.so.1″.
(gdb) run
Starting program: /home/jumpi/testes/a.out

Program received signal SIGTRAP, Trace/breakpoint trap.
main () at debug-teste.c:11
11 printf(”Ola!!”);
(gdb) c
Continuing.
Ola!!
Program exited with code 05.
(gdb) quit

Ou seja, com isso forçamos um int 3 no codigo como se fosse um breakpoint e com o SIGTRAP capturamos o sinal, que faz com que ele pense que havia um breakpoint onde na verdade nao havia, simples e interessante… :)

Enfim, existem diversas outras tecnicas de debugging e antidebugging, como fazer controle da ptrace(), usando file descriptor ou ate mesmo por identificacao de processos. Porem fica para uma proxima ocasiao… :)

No play: Arsis - United in Regret - 04: I Speak Through Shadows

Syndicated 2007-07-21 14:43:59 from Jumpi's Notepad

“f(problemas(ciência da computação(matemática)))”

Enfim… vai entender o que se passa na cabeça de um cara que me escreve um livro que para ser Cientista da Computação, você nao precisa saber de matematica??? Juro que eu queria entende-lo… porem, em minha humilde opiniao, isso se torna incompreensivel… Classificaria isto como uma blasfemia… Penso eu que a Ciencia da Computação esta amarrada a matematica assim como a fisica, ou talvez ate mais, devido ao fato de Ciencia da Computação na minha opiniao, ser uma ramificação da matematica, pois ela engloba grande parte dos conceitos matematicos, como a logica matematica (utilizada na logica booleana), teoria dos numeros (utilizada no campo da criptografia e na inteligencia artificial), teoria dos grafos (utilizada em estruturas de dados e nos algoritimos de busca), enfim, tudo na ciencia da computação engloba matematica, ou seja, por tras dos trabalhos computacionais existem modelos e metodos matematicos. Bem, sempre tive em mente que na verdade ser um cientista da computação é ser um matematico tambem, pois o mesmo utiliza-se de matematica para dar enfase aos seus trabalhos, o que na minha visao sempre entendi como matematica aplicada. E devido a essa visão, foi que escolhi ser Bacharel em Matematica, pois sempre pensei que a matematica me ajudaria a abrir os olhos para a area da Ciencia Computacional, e não me arrependo, pois tem sido bem util para o meu entendimento do funcionamento das coisas, afinal de contas eu consigo entender como funciona um SGBD gracas a teoria dos conjuntos ou um processo de raytracing gracas aos vetores. e não acaba por aqui… eu poderia dar n-exemplos aqui sobre a aplicacao da matematica na ciencia da computação… mas enfim… para quem estiver curioso em ler sobre a materia na qual gerou esse post e que me trouxe tanta revolta… segue o link…

http://www.itwire.com.au/content/view/13339/53/

Abraços e ate a proxima!!!!

No play: Symphony X - Paradise Lost - 09: The Sacrifice

Syndicated 2007-07-20 03:02:02 from Jumpi's Notepad

mudanças mode on

Well… well… muito tempo ja se passou desde a ultima vez que escrevi aqui nesse local.. enfim… vamos aproveitar e dar uma revisada nas mudanças que ocorreram na minha vida… enquanto compilo o kernel do NetBSD em uma imagem aqui que criei para meus testes e enquanto ouco no player Queensryche… :)

Enfim… muita coisa mudou na minha vida, arrumei novo emprego (isso ja fazem 3 meses… ate mudei o about), sim… sim… agora eu sou Engenheiro de Software de uma empresa (http://www.opencs.com.br) que desenvolve softwares de seguranca… bem interessante o trampo la, a convivencia, os amigos… estou aprendendo varias coisas novas sobre o mundo microsoft… mundo antes desconhecido por minha pessoa… afinal de contas tive muito pouco contato com esse mundo… esta sendo divertido esse mundo de windbg, visual studio, C++ o dia inteiro, isso sem contar nas risadas, piadas e situacoes engracadas do dia-a-dia, sem contar que a equipe e muito competente e todos sao muito receptivos… o que torna o ambiente super agradavel para se desenvolver as tarefas… tanto que eles me motivaram a continuar… e hoje para inaugurar a nova fase desse blog… ja que ninguem le aqui… ele vai se tornar um pouquinho mais tecnico, tentarei dar mais enfase a assuntos tecnicos que ocorrem no meu dia-a-dia, curiosidades, enfim… um blog beeeeeeeeeem mais informativo e agradavel principalmente para nerds… :)

Sim… outra mudanca foi no layout… achei esse layout bem mais bonitinho… enfim… e ele que eu vou usar daqui pra frente…

Well… hora de esperar o ./build.sh -O ../obj -T ../tools -u -U distribution terminar para dar continuidade ao meu trabalho… como diria um amigo meu do trampo… “Poder fazer um update fresquinho no sistema” e coisa linda de deus!!! :)

Ate a proxima… :)

No play: Queensryche - Greatest Hits - 04: Take Hold of the Flame

Syndicated 2007-07-19 04:34:50 from Jumpi's Notepad

You’re Perl

After long time that dont post here… I’m posting here again the result of language test that I see and answering… :D

Ohhhhhhh… This test is very funny!!!! Perl is my favorite language for write scripts… I like this…

You’re Perl

“You are Perl. People have a hard time understanding you, but you are always able to help them with almost all of their problems.”

For all that answering the questions too, the phrase above contains the link!!!

Thanks for all that see this blog… :D

Syndicated 2007-04-30 17:07:27 from Jumpi's Notepad

Meu ultimo fim de semana

Sorry, but today I dont write post in english here… :)

Caras… Esse final de semana foi simplesmente incrivel!!! Very fuckin’ good!!! :)

Vamos la… estava meio desanimado na 6a feira com tudo que vinha acontecendo na minha vida e tal… porem… tudo comecou na 6a a noite… eu fiquei impressionado como julgamos as pessoas por aparencias e as vezes elas acabam nos surpreendendo… posso dizer que fui surpreendido… mais isso nao vem ao caso… o fim de semana comecou na 6a… fomos eu e o Alex a.k.a. adevogado e guitarrista da freshmeat (sim… freshmeat e a minha banda… ) la no estudio… estava dando um rolo e fomos la… resolvemos a paradinha, conversamos sobre os rumos da banda e enfim… e bom saber que nao sou apenas eu que estou animado com essa historia… sabadao chega… dei um rapido pulo no Guaruja para pegar meus patins… sim… sim… resolvi voltar a andar de patins… Agressive Street mode on… eu nem aproveitei a praia… nem deu tempo de comer alguma coisa e ver o mar!!!! Mais tudo bem… afinal de contas tinha curso… aquele curso de aprimoramento em matematica que ando fazendo e que ja devo ter comentado aqui… e realmente esta sendo muito bom… Aprendi como utilizar transformada de Laplace e o quao ela e util para a resolucao de Equacoes Diferenciais… isso facilita bastante… sabia??? :)
Domingao… ahhhhhhhhhh domingao… mais um dia de curso… acordei cedo e aprendi novas coisas… como por exemplo… sobre Al Barr e Paul Bourke… sendo que esse ultimo eu ja conhecia o trabalho… mais nao sabia que fosse tao importante… e ambos os trabalhos tem relacao um com o outro… o trabalho do Al Barr fala sobre Superconicas… uma equacao para o quadrado… ja o do Paul Bourke e sobre Superconicas em um espaco tridimensional… varios filmes ja utilizaram essas tecnicas para modelar seus desenhos… principalmente os filmes da Pixar como Toy Story e A Bugs Life… well… tambem aprendi um pouco mais sobre wavelets… e posso dizer que fiquei interessado pela ideia… sei la… e de se pensar… Apos o curso nem voltei para casa… fui la e peguei o Alex e fomos para o Via Funchal… pra que??? Comprar o ingresso do TestamenT!!! Isso sim!!! Agora fudeo… Depois fomos procurar um lugar para comer… e achamos um lugar maneiro la perto do estudio em moema… que servia pizza de sorvete como sobremesa… muito legal… :)

Depois fomos rumo ao estudio… ensaio da Freshmeat… primeira vez nossa com nova afinacao… todos em C (Do)… ficou muito foda o som… esse ensaio foi bem divertido… pena que faltou a vocalista e um dos guitarristas, porem, comecamos a fazer testes para a linha melodica/harmonica de 3 musicas, a linha de guitarra/baixo/bateria… e posso dizer que o resultado esta ficando muito foda… fiquei muito feliz… voces nao tem nocao!!! Como diria a Elaine… vocalista da Freshmeat… “FRESHMEAAAAAT PORRAAAAAAAAA!!!”

Apos o ensaio, fomos comer algo e ficamos discutindo sobre a banda… projetos… e posso dizer uma coisa… a nossa apresentacao esta mais proxima do que esperam… Logo teremos otimas noticias aqui… e logo voces poderao ouvir os nossos sons… espero que gostem… estamos nos dedicando ao maximo!!! :)

Enfim… hoje voltei a semana bem animado… apenas uma noticia me preocupou… tenho que entregar o pre-relatorio da Iniciacao Cientifica no dia 08/03… e tinha esquecido completamente… FUDEOOOOOOOOOOOO!!!! Pergunte se eu escrevi algo??? :)

Outra coisa… resultado de um quiz que eu fiz… acho que tem a ver!!! :)

You scored as Death Metal.

You are a death metaller! You like growled vocals and blisteringly fast drums. Death to the false metal!

Death Metal 95%
Thrash Metaller 90%
Old School Heavy Metal 60%
Grindcore 50%
Power/Prog Metal 45%
Metal Troll 35%
Stoner 30%
Black Metaller 30%
Glam Metal 25%
Nu Metal/Metalcore 15%

Ate a proxima pessoas!!! :)

Para quem estiver interessado, segue abaixo os links que foram citados nesse post…

Al Barr (Superconicas):  http://www.gg.caltech.edu/~barr/

Paul Bourke (Superconicas Tridimensionais):  http://local.wasp.uwa.edu.au/~pbourke/

Ingrid Daubechies (Wavelets): http://www.pacm.princeton.edu/~ingrid/

Freshmeat Band: http://www.purevolume.com/freshmeatband

Syndicated 2007-03-05 15:30:49 from Jumpi's Notepad

Love and Tensor Algebra

Come, let us hasten to a higher plane
Where dyads tread the fairy fields of Venn,
Their indices bedecked from one to n
Commingled in an endless Markov chain!
Come, every frustrum longs to be a cone
And every vector dreams of matrices.
Hark to the gentle gradient of the breeze:
It whispers of a more ergodic zone.
In Riemann, Hilbert or in Banach space
Let superscripts and subscripts go their ways.
Our asymptotes no longer out of phase,
We shall encounter, counting, face to face.
I’ll grant thee random access to my heart,
Thou’lt tell me all the constants of thy love;
And so we two shall all love’s lemmas prove,
And in our bound partition never part.
For what did Cauchy know, or Christoffel,
Or Fourier, or any Bools or Euler,
Wielding their compasses, their pens and rulers,
Of thy supernal sinusoidal spell?
Cancel me not - for what then shall remain?
Abscissas some mantissas, modules, modes,
A root or two, a torus and a node:
The inverse of my verse, a null domain.
Ellipse of bliss, converge, O lips divine!
the product o four scalars is defines!
Cyberiad draws nigh, and the skew mind
Cuts capers like a happy haversine.
I see the eigenvalue in thine eye,
I hear the tender tensor in thy sigh.
Bernoulli would have been content to die,
Had he but known such a^2 cos 2 phi!

Syndicated 2007-03-04 02:47:37 from Jumpi's Notepad

goto problems;

Ohhhhhhhh… very funny… Suddenly all very confused again for me… I dont speaking about… I dont have time for nothing… I’m dont have time for thinking… I’m have very things… studies, work… at last… one day I think who this suffering finish… The good is who I’m returned make all things of my past, music, sports… well… I’m waiting!!!

I’m returning for my home motivated for working in my website, I’m make a general remodel, but I’m prefer see one documentary about Heavy Metal Story and this documentary is very funny…

Well… now I’m waiting for Carcass video conversions for putting in my iPod… :)

Thkz ppl… and c’ya… :)

________________________________________________________________________________

Caramba… que engracado… De repente tudo comecou a ficar tao confuso de novo… nem sei o que dizer… ando sem tempo para nada… nem para pensar eu tenho tempo… sao tantas coisas… estudos, trabalho… enfim… um dia acredito que esse sofrimento acabe… ohhhhhhhhh se acaba… o bom e que tambem aos poucos estou voltando a fazer tudo que abandonei no passado… musica, esportes… enfim… vamos ver no que vai dar ne???

Voltei para casa hoje empolgado para mexer no meu site… ia fazer uma reforma geral… mais estava passando um documentario sobre a Historia do Heavy Metal na TV e preferi assistir… por sinal foi bem divertido…

Well… agora deixa eu esperar terminar a conversao dos shows do carcass para jogar no meu iPod… :)

E isso ai galera… ate a proxima… :)

No play: Blackstar Rising - Barbed Wire Soul - 07: Revolution of the Heart

Syndicated 2007-02-23 02:34:18 from Jumpi's Notepad

Finally Free

Imagine you entering in the people life, aren’t notice and you when dont wait, you find one special people, you know with him, you life with him, you have a good and happy moments with him and when seen have all good, the people disappear of your life, as if it died and you have with empty feeling… and killing yourself, its horrible…

All time who listen this Dream Theater album (SFAM - Scenes From a Memory), mainly this song, I have this sensation, the strange sensation… Yesterday in my car I have hearing this album and I have much sincerity… I’m crying… Why??? I dont know… Perhaps either the sensation…

Well… who understand it ????

______________________________________________________________________________________________________________________________

Imagine você entrando na vida das pessoas, sem que elas percebam e quando voce menos espera tem um encontro com uma pessoa especial, vai conhecendo-a, vivendo com ela, tendo momentos bons e felizes e quando parece estar tudo certo a pessoa some, desaparece da sua vida, como se ela morresse e voce fica com aquele sentimento de vazio… E voce acaba se matando… Horrivel isso….

Porem toda a vez que escuto esse album do Dream Theater, principalmente essa musica… tenho essa sensacao… uma estranha sensacao… ontem no carro estava a ouvir esse album e vou ser bem sincero… ate acabei chorando… o porque??? nao sei… talvez seja a sensacao…

Bem… vai entender ne???

Listen: Dream Theater - Score (CD 1) - 05: Under a Glass Moon

Syndicated 2007-02-14 13:23:45 from Jumpi's Notepad

Well... After a some time... I returning again and I have a big surprise!!! My certification has disappeared!!! +_+

Its very strange because I see certifications that I got and I gave for people, but certifications that I got is dont valid for my account... perhaps its a bug???? I think...

I like aggregate my blog with this account, but I see that is dont possible because my certification dont permit this... :~~

27 older entries...

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!