Gå til innhold

Anbefalte innlegg

Videoannonse
Annonse
Ey, asm, bytes osv. har aldri vært min sterke side (i og med at jeg aldri har tid til å sette meg inn i det sååå) og jeg har et lite problem som jeg tenkte kanskje dere kan hjelpe meg med.

 

http://alex.pdrsn.net/x.txt

 

Jeg må finne ut hvor mange bytes det er fra: "PhraseP" til slutten av fila!

 

(Og legg gjerne ved forklaring! ;D k thx ;D)

  1. Lese filen inn i en buffer.
  2. Telle hvor mange bytes det er.
  3. Finne hvor "PhraseP" begynner.
  4. Trekke 3 fra 2.

Hvilken del er det du har problemer med?

Lenke til kommentar

Å gjøre dette manuelt kanskje? :O

Ska legge ved hvor mange bytes det ska hoppes over manuelt.

Antall bytes er alltids det samme, men ikke det som kommer etter. Er forskjellig fra pc til pc.

+ denne fila er ikke orginalen. Har kun tatt ei linje ut av orginal filen!

Endret av zorgion
Lenke til kommentar
Kanskje dette var feil måte å gå fram på. Men for eks. hvor mange bytes er 7E ?

 

Hva er "7E"? Hvis det er snakk om tegn, så blir det to bytes (chars) i C. Hvis det er snakk om en hex-verdi, 0x7e, så kan denne verdien være en representasjon for tegnet '~' (tilde) i ASCII. Når det gjelder å finne den magiske strengen, så kan du lage en funksjon som gjør omtrent det strstr() gjør for å finne hvor "PhraseP" opptrer.

Lenke til kommentar
Kanskje dette var feil måte å gå fram på. Men for eks. hvor mange bytes er 7E ?

 

Hva er "7E"? Hvis det er snakk om tegn, så blir det to bytes (chars) i C. Hvis det er snakk om en hex-verdi, 0x7e, så kan denne verdien være en representasjon for tegnet '~' (tilde) i ASCII. Når det gjelder å finne den magiske strengen, så kan du lage en funksjon som gjør omtrent det strstr() gjør for å finne hvor "PhraseP" opptrer.

 

Det er en hex-verdi,0x7E, eller om du vil "\x7E", ja og det er tegnet '~'.

Den "magiske strengen" har jeg allerede funnet. Problemet er bare å få skippa (x) bytes fremover også kopiere (x) bytes in i en char.

 

Et annet spørsmål (siden jeg kan så veldig lite om assambly osv.).

"\x00" er 0 bytes?

"\x01" er 1 bytes?

"\x04" er 4 bytes? også oppover? xD Sry er helt ute å fisker jeg :p

Lenke til kommentar
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
FILE *fstream;
char input[64];
char *filebuf;
int filelen;
char *at;

printf("Enter filename: ");
gets(input);

fstream = fopen(input, "rb");
if (!fstream)
{
	printf("Failure opening file %s\n", input);
	exit(-1);
}

fseek(fstream, 0, SEEK_END);
fgetpos(fstream, (fpos_t *)&filelen);
rewind(fstream);

filebuf = (char *)malloc(filelen+1);
fread(filebuf, sizeof(char), filelen, fstream);
filebuf[filelen] = 0;
fclose(fstream);

while (1)
{
	printf("Enter search string: ");
	gets(input);

	at = strstr(filebuf, input);
	if (!at)
		printf("Could not locate %s in file\n", input);
	else
	{
		printf("Found %s in file\nStarting at %d, %d bytes from the end\n", input, at - filebuf, strlen(filebuf) - (at - filebuf + strlen(input)));
	}
}

return -1;
}

gets burde helst unngås, men det er jo sånn en søt liten funksjon. :)

Lenke til kommentar

De fleste editorer har støtte for binærvisning, hvor den gjerne viser innholdet i fila ved å skrive selve bytesene. Siden en serie av nuller og enere ville blitt særdeles langt er det mest vanlig å vise bytesene som heksadesimaltall. Siden en byte som regel består av 8 bits, vil en byte i editoren vises som to heksadesimale tall.

 

Symbolet med den største verdien i hex er F, altså 15 desimalt, altså 1111 binært. To slike heksadesimale tall FF, altså 11111111 binært, altså en byte, er det som skal til for å vise hver byte i fila. Lykke til! :)

Lenke til kommentar
(...)
	while (1)
{
	printf("Enter search string: ");
	gets(input);

	at = strstr(filebuf, input);
	if (!at)
		printf("Could not locate %s in file\n", input);
(...)

 

Jeg fikk et inntrykk av at filen inneholdt ikke nødvendigvis vanlige tekstdata. I så fall vil ikke strstr() nødvendigvis gi rett svar.

Lenke til kommentar
Det er en hex-verdi,0x7E, eller om du vil "\x7E", ja og det er tegnet '~'.

Den "magiske strengen" har jeg allerede funnet. Problemet er bare å få skippa (x) bytes fremover også kopiere (x) bytes in i en char.

 

fseek() gjør kanskje det du leter etter. Hvis filen er forholdsvis liten, er det bare å lese hele filen inn i minne.

 

Et annet spørsmål (siden jeg kan så veldig lite om assambly osv.).

"\x00" er 0 bytes?

"\x01" er 1 bytes?

"\x04" er 4 bytes? også oppover? xD Sry er helt ute å fisker jeg :p

 

Spørsmålet, slik det er stilt, gir ingen mening.

 

Alt er avhengig av hva filen lagrer. Hvis filen lagrer 32-bits heltall (i en eller annen byte order), så vil hver av verdiene oppta nettopp det -- 32 bits (som er 32/CHAR_BIT chars/bytes i C).

 

Hvis det er enkeltstående bytes uten noe videre struktur, så kan hver byte representere verdier mellom 0 og 255 (evt. -128..127, avhengig av tolkningen), forutsatt 8 bits per byte.

 

Hvis filen inneholder tekst kodet i f.eks. utf-8, så gir det ingen mening å spørre om hva en bestemt byte er, da denne byten (sammen med andre) kan være representasjonen av et bestemt tegn.

 

Så, det første spørsmålet er da, nøyaktig hva inneholder filen og hva slags operasjon ønsker du å få utført?

 

edit: trykkfeil

Endret av zotbar1234
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...