亚历山大 Skrevet 20. mars 2009 Del Skrevet 20. mars 2009 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) Lenke til kommentar
zotbar1234 Skrevet 20. mars 2009 Del Skrevet 20. mars 2009 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) Lese filen inn i en buffer. Telle hvor mange bytes det er. Finne hvor "PhraseP" begynner. Trekke 3 fra 2. Hvilken del er det du har problemer med? Lenke til kommentar
亚历山大 Skrevet 20. mars 2009 Forfatter Del Skrevet 20. mars 2009 (endret) Å 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 20. mars 2009 av zorgion Lenke til kommentar
亚历山大 Skrevet 20. mars 2009 Forfatter Del Skrevet 20. mars 2009 Kanskje dette var feil måte å gå fram på. Men for eks. hvor mange bytes er 7E ? Lenke til kommentar
zotbar1234 Skrevet 20. mars 2009 Del Skrevet 20. mars 2009 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
亚历山大 Skrevet 20. mars 2009 Forfatter Del Skrevet 20. mars 2009 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 Lenke til kommentar
LostOblivion Skrevet 20. mars 2009 Del Skrevet 20. mars 2009 #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
亚历山大 Skrevet 20. mars 2009 Forfatter Del Skrevet 20. mars 2009 Takk for svaret, men jeg fant allerede det jeg letet etter (bruker en lignende metode), og fant ut av det med hex-digits osv. selv Men takk uansett Lenke til kommentar
LostOblivion Skrevet 21. mars 2009 Del Skrevet 21. mars 2009 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
zotbar1234 Skrevet 22. mars 2009 Del Skrevet 22. mars 2009 (...) 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
zotbar1234 Skrevet 22. mars 2009 Del Skrevet 22. mars 2009 (endret) 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 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 22. mars 2009 av zotbar1234 Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå