Gå til innhold

inkludere datafil som en del av koden


Anbefalte innlegg

Skrevet

Jeg har en datafil data.dat som er av typen: unsigned char data[8][128]

 

nå vil jeg at disse data skal legges inn i programmet slik at jeg kan lese data som om de var i en todimensjonal tabell

 

hvordan gjør jeg dette?

Videoannonse
Annonse
Skrevet (endret)

joda, jeg kan å lese til og fra filer i c++, men saken er at dette skal programeres på en avr

 

Fila jeg skal ha med inneholder data som avr'n skal bruke... og da aner jeg ikke hvordan jeg får den med.. untatt å sitte å manuelt skrive inn , 0x { } osv.

 

jeg innbiller meg at det er noe triks med preprosessoren i c som kan gjøre susen..

Endret av Zalo Ultra
Skrevet

Kan du ikke bare kopiere det til en char-array? Dette kan du vel gjøre ved å lage et kjapt script som dumper koden i det formatet du ønsker ("0x00, 0x01" f.eks) for så å copy-paste. Tror det hadde vært enklest om ikke annet.

Skrevet

Takk for svar

Det var egentlig noe slikt jeg så for meg. At dataene måtte manuelt copy-pastes inn i koden. Kunne selvsagt laget et skript av noe slag, men jeg tror jeg går for det enkleste, programmet Sokkalf linket til.

 

Hadde bare et lite håp om det gikk an å include en binærfil av noe slag.

  • 2 måneder senere...
Skrevet
\x betyr det vanlig hex-tall bare?

 

Hvorfor lagres data som strenger?

Shellcode lagres gjerne i en streng for at man skal kunne overskrive retur-pekeren til en funksjon med adressen til strengen. Dette gjør at istedenfor at programmet fortsetter å kjøre fra der funksjonen ble kalt, kjører den koden som er lagret i strengen.

Skrevet
blir jo nullterminert da...

 

for mitt tilfelle vil dette ødelegge datastrukturen...

 

Nullterminering ødelegger ikke datastrukturen. Nullterminering er ikke EOF. Nullterminering er kun aktuelt på funksjoner som antar at dataene er nullterminert.

Skrevet (endret)

hver byte skal skrives til et minne på et LCD-display. Hver byte i minnet tilsvarer 8 punkter som vises på displayet.

 

Derfor vil nullterminering ødelegge strukturen...

Endret av Zalo Ultra
Skrevet

Hva inneholder datafilen du har inkludert i koden?

 

 

Jeg antar at den f.eks er på formen

char data[] = {0x20, 0x42,0xXX, ..... 0x00,0x34,0x43};

char* data2 = "\x20\x42\xXX\x00\x34\x43";

 

 

Altså, nullterminering er lik 0x00 altså, åtte biter satt til 0. Nullterminering får du bare hvis datafilen du har, inneholder byten 0, og nullterminering spiller ingen rolle såfremt du ikke bruker noen funksjoner som MÅ ha nullterminerte strenger.

 

Hvordan mener du at det vil ødelegge datastrukturen din? Tenker du her på at printingen til LCD displayet stopper opp hvis den møter byten 0? Alle dataene eksisterer i variablene. Datastrukturen er ikke ødelagt. Du må bare vite hvor stor den og skrive ut alle bytene du har i datasettet.

Skrevet

som nevnt tidligere er datafilen på formen; unsigned char data[8][128] = {..., ...,};

 

jeg har ikke inkludert noe annet, ingen pekere til data eller noe.

 

nå virker det som jeg missforstår noe her, men når man lager en tabell slik:

BYTE ShellCode[] = "0x.., 0x.., 0x.., 0x.., 0x.., 0x.., ..."
			   "0x.., 0x.., 0x.., 0x.., 0x.., 0x.., ..."
			   "0x.., 0x.., 0x.., 0x.., 0x.., 0x.., ..."

 

så vil det dannes en tabell som inneholder alle byte i første streng + nullterminering, alle byte i andre streng + nullterminering osv.

 

det vil ikke dannes en tabell over pekere til starten av disse strengene.

 

 

Datafilen jeg har inneholder selvsagt byten 0, noe som tilsvarer 8 inaktive punkter på displayet.

Printingen til LCD-displayet vil ikke stoppe om den ser en null, men heller skrive ut 8 inaktive punkter på displayet...

 

 

Hele planen er å lese data fra en fil, og overføre nøyaktig disse dataene til RAM'en til LCD-displayet. Data i displayminnet må ligge perfekt sortert, i motsetning til hva det behøver i en mikrokontroller eller ne PC.

Skrevet

Skjønner ikke helt hva som er problemet med null-terminering, det er du som introduserer null-terminering selv, det er ingen krav at det er null-terminering i C. En string er bare et array av bytes, og så lenge du ikke bruker string funksjoner så er også null-terminering irrelevant.

 

Men nå gjentar jeg egentlig bare hva Roptaty sier.

 

Ikke tenk på null-terminering overhode, for det er ikke egentlig et problem.

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...