Gå til innhold

Søke hex filer for strings, og lage liste.


Anbefalte innlegg

Hei!

 

Jeg er en total noob når det gjelder programmering. Siden jeg har søkt og søkt, men ikke finner noe svar på nettet (eller noe jeg skjønner noe av rettere sagt), prøver jeg her.

 

Jeg trenger et program som søker opp antall steder en spesiell string finnes i en hex fil. En string på...ja la oss si 4 byte. Ikke nok med det, men også de neste 20 byte etter de 4. Og til slutt ende opp med en liste over alle stedene stringen finnes sammen med de neste 20 byte, som kan limes inn i word f.eks og sorteres. Håper dette gir noe mening.

 

Er dette noe som er mulig å få til? Jeg har grunnleggende kunnskaper i linux, så et script skulle jeg sikkert få til å kjøre. Å lage det er noe verre.

 

Setter pris på om noen kunne peke meg i riktig retning :)

 

MVH

 

Tommy

Lenke til kommentar
Videoannonse
Annonse

Det er ganske greit å få til, gitt at du kan litt programmering. Mitt tips er å starte med det enkle.

  1. Finn ut hvordan du kan laste en fil inn som et byte-array og hvordan du kan loope igjennom hver byte.
  2. Finn ut hvordan du kan finne en gitt byte sin index. (2.b: Finn ut hvordan du kan finne indexen til noe som består av 2 bytes)
  3. Finn slutten etter indexen du nettopp fant slik at du har startIndex og endIndex.
  4. Finn ut hvordan du kan kopiere det segmentet ut slik at du kan f.eks skrive det til en fil.

Det er mye lettere om du bare skal lese filen som tekst og finne tekst. Å jobbe med bytes er gjerne litt mer komplisert.

Lenke til kommentar

Hei Vakuum!

 

Fint å høre at det ikke er umulig! Mesteparten av dette gikk litt over hodet på meg... :hmm: men man må jo gjøre en innsats selv også, så jeg skal ta utgangspunkt i rådene dine, og forsøke meg frem :) Kan jo hende jeg lærer noe i tillegg, hehe. Kan hende jeg spør igjen om jeg lurer på noe, tusen takk så lenge :w00t:

 

MVh

 

Tommy

Endret av TommyL
Lenke til kommentar

Da ville jeg begynt med å lese tekst ut av en fil. Og heller gå over til bytes når du skjønner konseptet.

F.eks lag en tekstfil med innholdet "En stor elefant glemmer aldri en kokt banan" og finn en måte å hente fram "glemmer aldri" på i språket du ønsker å bruke.

Nybegynnertips: Ikke gjør veggen for høy. Dvs hvis noe er "umulig" så simplifiserer man og starter i det små. Så tar man erfaringene og jobber videre.

Lenke til kommentar

 

Et annet alternativ kunne være RegEx slik at du kan søke etter de fire første også ta med de neste 20 i en capture

Som er mulig, men rimelig klønete når du ikke har linebreaks. Mulig grep -U hadde løst problemet.

 

 

Og regexp på vilkårlige binære data er vel også litt spennende. Det er kanskje bedre om man kan få dumpet det gjennom hexdump elns først så man har et mer begrenset tegnsett å forholde seg til?

Lenke til kommentar

 

 

Et annet alternativ kunne være RegEx slik at du kan søke etter de fire første også ta med de neste 20 i en capture

Som er mulig, men rimelig klønete når du ikke har linebreaks. Mulig grep -U hadde løst problemet.

 

 

Og regexp på vilkårlige binære data er vel også litt spennende. Det er kanskje bedre om man kan få dumpet det gjennom hexdump elns først så man har et mer begrenset tegnsett å forholde seg til?

 

Med en "hex fil" som TS beskriver så regner jeg med det er en .hex på intel hex format.

Dette er ASCII filer med et begrenset tegnsett

: <- start of line

A-F0-9 <- gyldige tegn

\r <- carriage return

\n <- newline

 

Vil ikke tro det er problematisk å søke etter eks /B4DF00D/g ?

Endret av Enthroner
Lenke til kommentar

Om du kan anta det er det jo bare å kjøre på.

 

Altså, regex (på vilkårlig binærdata) i utgangspunktet går kjempefint fordi du kan bygge tilstandsmaskinen direkte og hente ut bytestringen. Men off-the-shelf regex tools er stort sett basert på tekst, så det blir litt mer mas når du plutselig må forholde deg til vilkårlige newlines og ekstremt lange linjer.

Lenke til kommentar

 

Hvis det er en binær fil og man ikke er så opptatt av ytelse kan man gjøre noe som
od -w9999999999 -A none -t x1 filename | grep ...
Det blir da en blank mellom hvert hex siffer som man må ta hensyn til.

 

Det er vel en rask | tr -d' ' | å bli kvitt?

Endret av Djn
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...