Thread View: pl.comp.os.linux.programowanie
4 messages
4 total messages
Started by Andrzej Radecki
Thu, 02 Sep 1999 15:56
OGLOSZENIE: disassembler
Author: Andrzej Radecki
Date: Thu, 02 Sep 1999 15:56
Date: Thu, 02 Sep 1999 15:56
72 lines
3570 bytes
3570 bytes
Witam!
Napisałem nakładkę (parser) na objdump'a. Działa to tak:
objdump -x --source <plik wykonywalny>|disasm
lub
objdump -xd <plik wykonywalny>|disasm
Parser ten konwertuje to co wypluwa objdump do postaci pliku html w ten
sposób, że każdemu skokowi odpowiada odnośnik. Przy czym można poruszać się
nie tylko w kierunku wywoływania funkcji ale i odwrotnym - przejść do
miejsca, z którego została wywołana funkcja. Myślę, że najlepiej wyjaśnić
to na przykładzie: (zrzut ekranu z Lynx'a)
int findstr(const char *dest, const char *source)
{
8048a6a 8048a7b 8048b62 8048b9e 8048e79
8048f0e 8048f88 8048fa2 8048fbc 8048fd6
8048ff0 804900a 8049024 804903e 8049058 <-*tu* są odnośniki
8049072 804908c 80490a6 80490c0 80490da do punktów, z
80490f4 804910e 8049128 8049142 804915c nastąpił skok
8049176 8049190 80491aa 80491c4 80491de do tego miejsca
80491f8 8049212 804922c 8049246 804925c
8049272 8049288 804929e 80492b4
80487f0: 55 pushl %ebp
80487f1: 89 e5 movl %esp,%ebp
80487f3: 83 ec 04 subl $0x4,%esp
80487f6: 57 pushl %edi
80487f7: 56 pushl %esi
80487f8: 53 pushl %ebx
int i,j;
int dlength=strlen(dest);
80487f9: 30 c0 xorb %al,%al
80487fb: 8b 7d 08 movl 0x8(%ebp),%edi
[...]
8048826: 39 c3 cmpl %eax,%ebx
8048828: 7f 33 jg 804885d <findstr+0x6d> <-a *tu*
804882a: 89 c7 movl %eax,%edi jest odnośnik do
for (j=0; j < slength; j++) adresu 0x804885d
Poza tym wstawia do instrukcji skoków nazwy procedur linkowanych dynamicz
nie. (nie wiem dlaczego objdump zostawiał w tych miejscach numerki)
W sumie te funkcje to żadna nowość, wcześniej spotkałem się z podobnie
działającym programem pod Win* (w32dasm). Na własnej skórze przekonałem się
jak pożyteczne to narzędzie. ;-) To rozwiązanie ma również wady. Naj
ważniejszą jest wrażliwość na funkcje wirtualne (nie sposób ustalić co
znajduje się w rejestrze bez uruchamiania programu). Drugą wadą jest
czasochłonność. Tych odnośników jest naprawdę dużo więc przy dużych
programach mogą pojawić się problemy. Właśnie dlatego napisałem to w C a
nie np. perlu - może choć trochę przyspieszy to operacje.
Program testowałem wraz z objdump'em w wersji:
GNU objdump 2.9.1
na formacie plików:
elf32-i386
Jeśli ktoś zauważy jakieś problemy, pokusi się o jakieś zmiany lub ma
jakieś pomysły to proszę o kontakt.
Program można znaleźć pod adresem:
http://www.wpk.p.lodz.pl/~radecki/disasm.tar.gz
Później skrobnę jeszcze do niego odpowiednią stronkę.
Pozdrawiam,
--
( /6/ Andrzej Radecki
==== \ radecki@wpk.p.lodz.pl
/ | http://www.wpk.p.lodz.pl/~radecki
Re: disassembler
Author: Andrzej Radecki
Date: Fri, 03 Sep 1999 15:42
Date: Fri, 03 Sep 1999 15:42
53 lines
2686 bytes
2686 bytes
Andrzej Radecki <radecki@wpk.p.lodz.pl> pisze: >Napisałem nakładkę (parser) na objdump'a. Działa to tak: [...] Poprawiłem nieco kod. Teraz zamiast: [and /d/home/and/zrodla/disasm/jed_tmp]$ date; cat jed|./disasm; date pią wrz 3 10:24:17 CEST 1999 Disassembler parser Rev 0.01 2.IX.1999 Andrzej Radecki [...] pią wrz 3 10:49:45 CEST 1999 jest: [and /d/home/and/zrodla/disasm/jed_tmp]$ date; cat jed|./disasm; date pią wrz 3 16:47:10 CEST 1999 Disassembler parser Rev 0.01 2.IX.1999 Andrzej Radecki [...] pią wrz 3 16:50:00 CEST 1999 8x szybciej to chyba nieźle ;-) (ale to raczej "zasługa" głupiego algorytmu zastosowanego w poprzedniej wersji). Program uruchamiałem na 486dx-50MHz/16MB. Teraz zależność czasu wykonywania do wielkości pliku wejściowego jest _znacznie_ bardziej liniowa przez co przyrost prędkości w stosunku do poprzedniej wersji jest tym bardziej widoczny im większy plik. Plik 'jed' utworzony był przez: $ objdump -x --source /usr/local/bin/jed > jed Teraz prośba(y): Nie wiecie gdzie znaleźć jakiś porządny "walidator" html'a? Ciężko mi sprawdzić wygenerowane pliki ręcznie gdy ich rozmiar sięga 3MB jak w powyższym przykładzie. A pliki generowane różnymi wersjami programu nieco się różnią choć 'na oko' nie widać w żadnym z nich błędów. Chciałbym aby ktoś doświadczony w programowaniu w C obejrzał kod bo zastosowałem takie naprędce wymyślone indeksowanie listy danych i nie wiem czy zrobiłem to prawidłowo (trochę się w tym gubiłem). Czy jest jakaś przeglądarka hipertekstowa potrafiąca odczytać jakiś binarny indeks odnośników? Problem w tym, że lynx długo wczytuje pliki wyjściowe (de facto powtarza on tą samą czynność, którą wykonał mój program - tworzenie indeksu odnośników). Nowa wersja (0.02) jest tam gdzie poprzednio, czyli: http://www.wpk.p.lodz.pl/~radecki/disasm.tar.gz Pozdrawiam, -- ( /6/ Andrzej Radecki ==== \ radecki@wpk.p.lodz.pl / | http://www.wpk.p.lodz.pl/~radecki
Re: disassembler
Author: Adam Przybyla
Date: Sat, 04 Sep 1999 11:32
Date: Sat, 04 Sep 1999 11:32
39 lines
2292 bytes
2292 bytes
Andrzej Radecki <radecki@wpk.p.lodz.pl> wrote: > Andrzej Radecki <radecki@wpk.p.lodz.pl> pisze: >>Napisałem nakładkę (parser) na objdump'a. Działa to tak: > [...] > Poprawiłem nieco kod. Teraz zamiast: > [and /d/home/and/zrodla/disasm/jed_tmp]$ date; cat jed|./disasm; date > pią wrz 3 10:24:17 CEST 1999 > Disassembler parser Rev 0.01 2.IX.1999 Andrzej Radecki > [...] > pią wrz 3 10:49:45 CEST 1999 > jest: > [and /d/home/and/zrodla/disasm/jed_tmp]$ date; cat jed|./disasm; date > pią wrz 3 16:47:10 CEST 1999 > Disassembler parser Rev 0.01 2.IX.1999 Andrzej Radecki > [...] > pią wrz 3 16:50:00 CEST 1999 > 8x szybciej to chyba nieźle ;-) (ale to raczej "zasługa" głupiego algorytmu > zastosowanego w poprzedniej wersji). Program uruchamiałem na > 486dx-50MHz/16MB. Teraz zależność czasu wykonywania do wielkości pliku > wejściowego jest _znacznie_ bardziej liniowa przez co przyrost prędkości > w stosunku do poprzedniej wersji jest tym bardziej widoczny im większy > plik. Plik 'jed' utworzony był przez: > $ objdump -x --source /usr/local/bin/jed > jed > Teraz prośba(y): > Nie wiecie gdzie znaleźć jakiś porządny "walidator" html'a? Ciężko mi > sprawdzić wygenerowane pliki ręcznie gdy ich rozmiar sięga 3MB jak > w powyższym przykładzie. A pliki generowane różnymi wersjami programu nieco > się różnią choć 'na oko' nie widać w żadnym z nich błędów. ... zobacz http://sun.iinf.polsl.gliwice.pl/~adam/kompilatory.html Z powazaniem Adam Przybyla
Re: disassembler
Author: Dawid Kuroczko
Date: Sat, 04 Sep 1999 20:10
Date: Sat, 04 Sep 1999 20:10
16 lines
1697 bytes
1697 bytes
3 września, godzina 15:42, na pl.comp.os.linux.programowanie pisze Andrzej Radecki:
> Nie wiecie gdzie znaleźć jakiś porządny "walidator" html'a? Ciężko mi
> sprawdzić wygenerowane pliki ręcznie gdy ich rozmiar sięga 3MB jak
> w powyższym przykładzie. A pliki generowane różnymi wersjami programu nieco
> się różnią choć 'na oko' nie widać w żadnym z nich błędów.
Zobacz nsgmls. Jest to część sgml-tools i/lub Jade.
Jak dla mnie działa świetnie. :)
Pozdrawiam,
Dawid Kuroczko
--
.------------------. .----------. ...and the net becomes my bride
| *Dawid Kuroczko* `--.---=' _Kraków_ | so in her I do confide
| q n e x @pld.org.pl | Member of PLD | and she keeps me satisfied
`---------------------"---------------' gives me all I need
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads