Newsgroup: it.comp.os.linux.development
Titolo: Decompilatore esiste per c/c++ sotto Linux?

Stò cercando il modo di capire come funziona un demone che purtroppo manca
di documentazione
e va sempre il segmentation fault.
Da quello che ho potuto capire non ha librerie dinamiche ed è in ELF.
Vorrei decompilarlo per vedere se almeno dal codice si capisce cosa non và.
Si puoò capire in altri modi altrimenti?
Grazie e scusatemi se è OT.

 vą. Si puoņ capire in altri modi altrimenti?
Non puoi usare GDB ?
Oz

 ha scritto nel messaggio
news:pan.2003.10.16....@zerozone.it...

Si puņ utilizzarlo anche senza avere a disposizione i sorgenti? non bisogna
compilarlo con qualche opzione per permettere il debugging?
Se si puņ fare come posso fare?
Grazie mille.

O-Zone wrote:

Mi sembra che per usare GDB sia necessario compilare l'eseguibile con
l'opzione debug. 
-- 
Ciao,
        Fabrizio
<=- 
http://www.negusweb.it
 -=>

Pisinho wrote:

e' un prodotto proprietario ???
seno' puoi trovare i sorgenti ricompilarlo in modalita' debug e debuggarlo con 
un debugger almeno capisci cosa va in sigfault
ciao

 và. Si puoò capire in altri modi altrimenti?
prova con:
ltrace programma 2> pippo
in pippo trovi tutte le syscall che ha chiamato.
ciao.
-- 
-------------------------------------------------------------------------------
Il masochista:  - Picchiami!
Il sadico:      - No!
-------------------------------------------------------------------------------

 Si puo? capire in altri modi altrimenti?
magari prima puoi dargli un'occhiata con strace e ltrace, giusto per
capire grosso modo cosa sta facendo prima di andare in crash. Magari
aiuta. Altrimenti, se vuoi disassemblarlo, puoi usare un debugger
(es: gdb) e divertirti con l'assembly :)
-- 
There are only 10 kinds of people in the world --
Those who understand binary, and those who don't.


Con ltrace il risultato è questo:
--- SIGCHLD (Child exited) ---
--- SIGCHLD (Child exited) ---
--- SIGSEGV (Segmentation fault) ---
+++ killed by SIGSEGV +++
mentre con strace :
--- SIGCHLD (Child exited) @ 0 (0) ---
pipe([4, 5])                            = 0
fork()                                  = 3401
close(5)                                = 0
read(4, "yes", 3)                       = 3
close(4)                                = 0
wait4(0, [WIFEXITED(s) && WEXITSTATUS(s) == 0], 0, NULL) = 3401
--- SIGCHLD (Child exited) @ 0 (0) ---
write(3, "Can we archive? 1; Can we reflec"..., 37) = 37
time([1066501227])                      = 1066501227
rt_sigaction(SIGCHLD, {0x804a0c0, [], SA_RESTORER|SA_RESTART, 0x807b9c8},
{SIG_DFL}, 8) = 0
rt_sigaction(SIGINT, {0x804a22c, [], SA_RESTORER|SA_RESTART, 0x807b9c8},
{SIG_DFL}, 8) = 0
brk(0x80f1000)                          = 0x80f1000
open("/etc/nsswitch.conf", O_RDONLY)    = 4
fstat64(4, {st_mode=S_IFREG|0644, st_size=1254, ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)
= 0x40001000
read(4, "#\n# /etc/nsswitch.conf\n#\n# An ex"..., 4096) = 1254
read(4, "", 4096)                       = 0
close(4)                                = 0
munmap(0x40001000, 4096)                = 0
open("/etc/ld.so.cache", O_RDONLY)      = 4
fstat(4, {st_mode=S_IFREG|0644, st_size=92128, ...}) = 0
old_mmap(NULL, 92128, PROT_READ, MAP_PRIVATE, 4, 0) = 0x40001000
close(4)                                = 0
open("/lib/libnss_files.so.2", O_RDONLY) = 4
fstat(4, {st_mode=S_IFREG|0755, st_size=42881, ...}) = 0
read(4, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0p\35\0\000"...,
4096) = 4096
old_mmap(NULL, 38492, PROT_READ|PROT_EXEC, MAP_PRIVATE, 4, 0) = 0x40018000
mprotect(0x40021000, 1628, PROT_NONE)   = 0
old_mmap(0x40021000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 4,
0x8000) = 0x40021000
close(4)                                = 0
open("/lib/libc.so.6", O_RDONLY)        = 4
fstat(4, {st_mode=S_IFREG|0755, st_size=1491599, ...}) = 0
read(4, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0pY\1\000"..., 4096)
= 4096
old_mmap(NULL, 1268004, PROT_READ|PROT_EXEC, MAP_PRIVATE, 4, 0) = 0x40022000
mprotect(0x40151000, 26916, PROT_NONE)  = 0
old_mmap(0x40151000, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 4,
0x12f000) = 0x40151000
old_mmap(0x40155000, 10532, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x40155000
close(4)                                = 0
open("/lib/ld-linux.so.2", O_RDONLY)    = 4
fstat(4, {st_mode=S_IFREG|0755, st_size=97518, ...}) = 0
read(4, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\200\n\0"..., 4096)
= 4096
old_mmap(NULL, 83576, PROT_READ|PROT_EXEC, MAP_PRIVATE, 4, 0) = 0x40158000
mprotect(0x4016c000, 1656, PROT_NONE)   = 0
old_mmap(0x4016c000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 4,
0x14000) = 0x4016c000
close(4)                                = 0
brk(0x80f2000)                          = 0x80f2000
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
+++ killed by SIGSEGV +++
Qualcuno è capace di interpretarlo?