Ajuda para abrir um arquivo em HEXADECIMAL

1. Ajuda para abrir um arquivo em HEXADECIMAL

Lekao
lekao25

(usa FreeBSD)

Enviado em 23/01/2009 - 10:57h

Olá pessoal,

Sou novo no fórum e gostaria de parabenizar a todos pelo excelente conteúdo disponibilizado.
Sou iniciante em C++, tive aula na facu e tenho algumas dúvidas sobre o "programa" que estou tentando fazer. Vamos la...

Vou apresentar o "projeto", de repente se alguém se interessar...



Projeto Code Veronica BR - PS2


Gosto muito de games e comecei a jogar o "Resident Evil Code Veronica" para Play2. Me interessei pela idéia de passar as legendas do jogo para portugês, como tambem nomes de itens e descrições.
Então para fazer isso instalei um editor hexadecimal e fui abrindo os arquivos do jogo, até achar o arquivo que tem os textos.

Modifiquei o arquivo pelo editor hexa, inseri em uma ISO que fiz do jogo, gravei e rodei no Play2. Então................ Funcionou!!! Após várias tentativas e testes, verifiquei os padrões dentro do arquivo, como por exemplo início de uma frase, nome de item, maiuscula e minuscula e que só se pode alterar dentro do mesmo espaço de letras que a frase ou palavra tem.

Como o arquivo aberto em hexa é muito grande, eu vou fazer um programa que leia o arquivo em hexa, converta letra por letra em hexa para uma forma legível (de acordo com a tabela correspondência que montei), imprima o texto na tela e na linha abaixo eu escreva o texto em português, e converta novamente (de acordo com a tabela correspondência que montei) para hexa e vá salvando em um novo arquivo.

Logo no iníco encontrei problemas, não estou conseguindo abrir o arquivo em hexadecimal...

Na verdade queria fazer uma funcção que fosse percorrendo o arquivo e jogasse o conteúdo que está entre os hexa "ff ff" (são os separadores) para um vetor, onde ficariam armazenadas as frases em hexa.


O código mais perto que consegui foi esse http://www.vivaolinux.com.br/scripts/verFonte.php?codigo=3516&arquivo=viewhex.c , mas além de não funcionar (compilei no XP com Borland C++ 4, as linhas com '{FONTE}' deram erro, então apaguei) e abrir só 17 linhas hexa do arquivo, não quero imprimir tabela na tela... Se alguém conseguir ver porque esse código não abre totalmente o arquivo e puder postar aqui ficarei muito grato, pois posso tentar modificá-lo para meus objetivos.

#include <stdio.h>

void byteToHexa (unsigned char b, char* hex);
void intTohex (unsigned long int b, char* hex);

int main (int argc, char* argv[])
{
FILE *arq;
char buf[3];
int contByteLin=0;
unsigned long int contLin=1;
char pos [9];

int f;

if (argc!=2)
{
printf ("Parametro incorreto.\n");
printf ("Informe apenas o nome do arquivo\n");
return 1;
}

if (!(arq=fopen(argv[1],"r")))
{
printf ("Nao foi possivel abrir o arquivo!\n");
return 1;
}

printf (" 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F\n");
printf (" -----------------------------------------------\n");
printf ("00000000 | ");
while (f=fread(buf,1,1,arq))
{
if (contByteLin==16)
{
contByteLin = 0;
printf ("\n");

if ((contLin % 0x10) == 0)
{
printf (" -----------------------------------------------\n");
printf (" 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F\n");
printf (" -----------------------------------------------\n");
}

intTohex (contLin++, pos);
printf ("%s | ",pos);
}

byteToHexa (buf[0],buf);
printf ("%s ",buf);

contByteLin ++;
}

printf ("\n");
close (arq);
}

void byteToHexa (unsigned char b, char* hex)
{
char vet[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
int r;
int i;

r = b % 16;
i = (b - r)/16;
hex[0] = vet[i];
hex[1] = vet[r];
// hex[2] = '{FONTE}';
}

void intTohex (unsigned long int b, char* hex)
{
char vet[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
unsigned long int r;

r = b % 0x10; hex[7] = vet[r]; b = b >> 0x4;
r = b % 0x10; hex[6] = vet[r]; b = b >> 0x4;
r = b % 0x10; hex[5] = vet[r]; b = b >> 0x4;
r = b % 0x10; hex[4] = vet[r]; b = b >> 0x4;
r = b % 0x10; hex[3] = vet[r]; b = b >> 0x4;
r = b % 0x10; hex[2] = vet[r]; b = b >> 0x4;
r = b % 0x10; hex[1] = vet[r]; b = b >> 0x4;

hex[0] = vet[b];
// hex[8] = '{FONTE}';
}


Obrigado pessoal






  


2. Explicação do código

Lekao
lekao25

(usa FreeBSD)

Enviado em 25/01/2009 - 16:06h

Estou tentando analisar o código para ver o que está acontecendo mas tá difícil...
Por favor, alguém me fale o que significa as linhas que tem a palavra '{FONTE}'; pois removi essas linhas para compilar, pois não compilou com elas, e se posso substituir por alguma coisa.


3. Re: Ajuda para abrir um arquivo em HEXADECIMAL

Geraldo José Ferreira Chagas Júnior
gjr_rj

(usa Debian)

Enviado em 16/02/2009 - 15:47h

Olá,

só hoje fui ler a mensagem que me enviou sobre o meu script de hexadecimal, esse que você postou acima.

O erro que está ocorrendo com o '{fonte}' é que na realidade deveria ser "\ 0" sem o espaço, mas quando se posta "\ 0" da forma que deve ser, o site do vivaolinux tranforma em '{fonte}', não sei pq.


4. Re: Ajuda para abrir um arquivo em HEXADECIMAL

Geraldo José Ferreira Chagas Júnior
gjr_rj

(usa Debian)

Enviado em 16/02/2009 - 15:53h

Sabe qual é meu e-mail, me envia mais explicado o que você deseja e também o arquivo que deseja modificar. Acho que será possível te ajudar


5. Re: Ajuda para abrir um arquivo em HEXADECIMAL

Mauro Risonho de Paula Assumpção A.K.A firebits
firebits

(usa Debian)

Enviado em 16/02/2009 - 16:03h

Pelo o que entendi você que um editor hexadecimal que substitua os valores pelo o que você deseja automaticamente?
Há vários no linux, quais estou escrevendo artigos e vou publicar esta semana. Só peço que aguarde pois estou revendo os artigos antes de publicá-los






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts