Gå til innhold

inkludere datafil som en del av koden


Anbefalte innlegg

Videoannonse
Annonse

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
Lenke til kommentar

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.

Lenke til kommentar
  • 2 måneder senere...
\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.

Lenke til kommentar
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.

Lenke til kommentar

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.

Lenke til kommentar

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.

Lenke til kommentar

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.

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å
×
×
  • Opprett ny...