🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.os.linux.programowanie
Article #133

OGLOSZENIE: disassembler

#133
From: Andrzej Radecki
Date: Thu, 02 Sep 1999 15:56
72 lines
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
Technical Details
Message-ID: <slrn7st7gu.26s.radecki@radek.localdomain>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!mat.uni.torun.pl!radek.localdomain!radecki

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!mat.uni.torun.pl!radek.localdomain!radecki
From: radecki@wpk.p.lodz.pl (Andrzej Radecki)
Newsgroups: pl.comp.os.linux.programowanie,pl.comp.os.linux
Subject: OGLOSZENIE: disassembler
Followup-To: pl.comp.os.linux.programowanie
Date: 2 Sep 1999 15:56:15 GMT
Organization: home
Lines: 72
Message-ID: <slrn7st7gu.26s.radecki@radek.localdomain>
NNTP-Posting-Host: ppp-119.lodz.tpnet.pl
Mime-Version: 1.0
User-Agent: slrn/0.9.5.7 (UNIX)
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit