Först måste du förstå att kommandot pdf
används för att demontera funktioner, så du måste först leta efter funktionsstartpunkter (jag tror att de använder symboler och några andra heuristik för att hitta Det).
För att få en automatisk analys av funktionerna, skriv bara aaa
först. Det kör mest av den nödvändiga analysen på den körbara filen. Skriv sedan pdf.
Om du bara vill ha en rå demontering utan funktionsanalys skriver du bara pd.
logiken bakom radarkommandona är att varje tecken i kommandot har en mening och bygger trädliknande kommandofamilj.
Till exempel är " p
" för kommandofamiljen "printing". Försök att skriva p?
, du får följande:
[0x00005430] > p? | Användning: p [= 68abcdDfiImrstuxz] [arg | len] [@ addr] | p = [?] [bep] [blks] [len] [blk] visa entropi / utskrivbara tecken / teckenstaplar | p2 [len] 8x8 2bpp-brickor | p3 [fil] skriva ut stereogram (3D) | p6 [de] [len] base64 avkoda / koda | p8 [?] [j] [len] 8bit hexpair-lista över byte | pa [edD] [arg] pa: montera pa [dD]: disasm eller pae: esil från hexpairs | pA [n_ops] visa n_ops adress och typ | p [b | B | xb] [len] ([skip]) bindump N-bitar som hoppar över M | pb [?] [n] bitström från N-bitar | pB [?] [n] bitström från N byte | pc [?] [p] [len] output C (eller python) format | pC [d] [rader] skriva ut demontering i kolumner (se hex.cols och pdi) | pd [?] [sz] [a] [b] demontera N opcodes (pd) eller N byte (pD) | pf [?] [. nam] [fmt] skriva ut formaterade data (pf.name, pf.name $ <expr>) | ph [?] [= | hash] ([len]) beräkna hash för ett block | p [iI] [df] [len] skriv ut N ops / byte (f = func) (se pi? och pdi) | pm [?] [magi] skriva ut libmagiska data (se pm? och / m?)
| pr [?] [glx] [len] skriv ut N råa byte (i rader eller hexblock, 'g'unzip) | p [kK] [len] utskriftsnyckel i slumpmässigt konst (K är för mosaik) | ps [?] [pwz] [len] skriv ut pascal / breda / nollavslutade strängar | pt [?] [dn] [len] skriv ut olika tidsstämplar | pu [?] [w] [len] skriv ut N url-kodade byte (w = bred) | pv [?] [jh] [mode] visar variabel / pekare / värde i minnet | p - [?] [jh] [mode] bar | json | histogramblock (läge: e? search.in) | px [?] [owq] [len] hexdump av N byte (o = oktal, w = 32bit, q = 64bit) | pz [?] [len] utskriftszoomvy (se pz? för hjälp) | pwd visar aktuell arbetskatalog
Sedan står den andra bokstaven ( d
) för "demontera", försök pd?
:
[0x00005430] > pd? | Användning: p [dD] [ajbrfils] [sz] [arch] [bitar] # Demontering av tryck | OBS: len-parametern kan vara negativ | OBS: Om du trycker på ENTER på det tomma kommandot upprepas det sista pd-kommandot och försöker också avsluta det demonterade intervallet pd N demontera N-instruktioner | pd -N demontera N-instruktioner bakåt | pD N demontera N byte | pda demontera alla möjliga opkoder (byte per byte) | pdb demontera grundblock | pdc pseudo disassembler output i C-liknande syntax | pdC visar kommentarer som finns i N-instruktioner | pdk demontera alla metoder i en klass | pdj demontera till json | pdr rekursiv demontering över funktionsdiagrammet | pdf-demonteringsfunktion | pdi som 'pi', med offset och byte | pdl visa instruktionsstorlekar pds [?] demontera sammanfattning (strängar, samtal, hopp, refs) (se pdsf och pdfs) | pdt demontera felsökningsspåren (se atd)
Som du kan se, står pdf
för "demontera funktion".
Men om du vill ha en rå demontering av ett minnesområde, är pd
förmodligen det du behöver. Det demonteras blint från den aktuella adressen upp till vissa minnesfönster. Om du vill ta isär på en exakt adress använder du pd @ 0xdeadbeef
.