Traduire pascal en c help
zilot2
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
Bonjour,et pardonnez mon francais
j'ai un code source en pascal et j'ai pas reusii a le traduire en c si quelq'un peut m'aide
Program patch; //juste pour indiquer le nom du prog
Uses CRT, DOS; //indique quelle bibliothèque on va utiliser des
//routines graphiques DOS
Const //indique que l' on va charger des constantes
//en mémoire pour les réutiliser par la suite
FileN : String = 'progde~1.exe'; //FileN va donc indiquer
//le fichier 'progde~1.exe'
//dès que l' en aurat besion
BytesToChange : Integer = 2; //2 indique le nombre d' octects à
//patcher
FileS : LongInt = 564132; //564132 indique la taille du fichier.
//Elle s' éxprime en octects
A : Array[1..2] of Record //indique que l' on va donner
//de modification allant de
//1 à 2, ici en octects
A : Longint;
B : Byte;
End =
(
(A:$303e6;B:$90), //adresses héxadécimales à modifier et leurs octects
(A:$47274;B:$90) //attention !! sur la derniere ligne=> pas de virgule !!!!
);
Var
F : File;
Ch : Char;
Attr : Word;
I : LongInt;
If (FSearch(FileN,FExpand(FileN))='') then //cherche le fichier FileN,
//S'il est non présent,
//alors => Message d'erreur...
Begin
Writeln('oOOPS!: File ',FileN,' not found !!!');
Writeln('-Current bad size has: ', FileSize (F),' bytes.');
Writeln('-Good size should be : ', FileS ,' bytes.');
Halt(1);
end;
Assign(F,FileN);
Reset(F,1); //pour ouvrir un fichier
TextColor(8);
Write('Checking FileSize...');
If FileSize(F)<>FileS then //FileSize verifie la taille du fichier...
begin //début du mesage d' erreur
//(si le fichier cible n'a pas la bonne taille..)
Writeln('ERROR!');
Writeln('');
Writeln('File ',FileN,' has an invalid Size !!!');
Writeln('Crack aborted...');
Close(F); //on ferme le fichier
Halt(1); //on arrete le prog
end //fin du passage affichant une erreur...
Else
begin //ce qui suit est le "patchage" des octets...
end; //fin de la reconnaissance le la taille du fichier
TextColor(8);
Write('pat ',FileN,'...'); //Et hop!, on réutilise encore ',FileN,'
For I := 1 to BytesToChange do //change les octect de 1 à...'x'
begin
Seek(F,A[I].A); //repere l'offset a patcher
Ch:=Char(A[I].B); //on identifie la nouvelle valeur de l'offset
//et on la stock dans 'Ch'
Blockwrite(F,Ch,1); //ouf! Après toutes les conditions remplis, le prog va
//enfin pouvoir modifier le fichier cible en inscrivant
//des octects par blocs de 1, tels qu'ils sont indiqués
//par (A:$303e6;B:$00) et (A:$47274;B:$00) dans l'exemple.
end;
Close(F)
end.
j'ai un code source en pascal et j'ai pas reusii a le traduire en c si quelq'un peut m'aide
Program patch; //juste pour indiquer le nom du prog
Uses CRT, DOS; //indique quelle bibliothèque on va utiliser des
//routines graphiques DOS
Const //indique que l' on va charger des constantes
//en mémoire pour les réutiliser par la suite
FileN : String = 'progde~1.exe'; //FileN va donc indiquer
//le fichier 'progde~1.exe'
//dès que l' en aurat besion
BytesToChange : Integer = 2; //2 indique le nombre d' octects à
//patcher
FileS : LongInt = 564132; //564132 indique la taille du fichier.
//Elle s' éxprime en octects
A : Array[1..2] of Record //indique que l' on va donner
//de modification allant de
//1 à 2, ici en octects
A : Longint;
B : Byte;
End =
(
(A:$303e6;B:$90), //adresses héxadécimales à modifier et leurs octects
(A:$47274;B:$90) //attention !! sur la derniere ligne=> pas de virgule !!!!
);
Var
F : File;
Ch : Char;
Attr : Word;
I : LongInt;
If (FSearch(FileN,FExpand(FileN))='') then //cherche le fichier FileN,
//S'il est non présent,
//alors => Message d'erreur...
Begin
Writeln('oOOPS!: File ',FileN,' not found !!!');
Writeln('-Current bad size has: ', FileSize (F),' bytes.');
Writeln('-Good size should be : ', FileS ,' bytes.');
Halt(1);
end;
Assign(F,FileN);
Reset(F,1); //pour ouvrir un fichier
TextColor(8);
Write('Checking FileSize...');
If FileSize(F)<>FileS then //FileSize verifie la taille du fichier...
begin //début du mesage d' erreur
//(si le fichier cible n'a pas la bonne taille..)
Writeln('ERROR!');
Writeln('');
Writeln('File ',FileN,' has an invalid Size !!!');
Writeln('Crack aborted...');
Close(F); //on ferme le fichier
Halt(1); //on arrete le prog
end //fin du passage affichant une erreur...
Else
begin //ce qui suit est le "patchage" des octets...
end; //fin de la reconnaissance le la taille du fichier
TextColor(8);
Write('pat ',FileN,'...'); //Et hop!, on réutilise encore ',FileN,'
For I := 1 to BytesToChange do //change les octect de 1 à...'x'
begin
Seek(F,A[I].A); //repere l'offset a patcher
Ch:=Char(A[I].B); //on identifie la nouvelle valeur de l'offset
//et on la stock dans 'Ch'
Blockwrite(F,Ch,1); //ouf! Après toutes les conditions remplis, le prog va
//enfin pouvoir modifier le fichier cible en inscrivant
//des octects par blocs de 1, tels qu'ils sont indiqués
//par (A:$303e6;B:$00) et (A:$47274;B:$00) dans l'exemple.
end;
Close(F)
end.
Configuration: Windows Vista Firefox 3.5.2
2 réponses
-
Ton code en Pascal est incorrect ! Corrige le avant de pouvoir espérer qu'on t'en fasse une conversion vers le C...
Utilise les balises de code (à droite du bouton souligné) pour conserver l'indentation.-
en realite je ne sais pas programmer en pascal j'ai trouver ce code comment patcher sans utiliser un editeur hexadecimal c-a-d utiliser un langage j'ai cherché google sur l'equivalence des fonctions et j'ai essayé de faire le programme en c mais ca ne marche je pense que blockwrite n'a pas le meme fonctionement que fwrite
le programme que j'ai essaye de patcher affiche hello j'ai voulu le patcher pour qu'il affiche hi à la place voici mon essaie en c
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
long offset= 0x1200;
char hi[]="\x48\x49\x00\x00\x00\x00\x00\x00\x00\x00\x00";
FILE *f;
f= fopen("lilo.exe","w+");
fseek(f,offset,SEEK_SET);
fwrite(&hi,sizeof(hi),1,f);
return 0;
}
0x1200 l'offset que je dois changer
lilo.exe mon prog qui affiche hello
mon probleme apres l'execution du programme j'ouvre lilo.exe avec hediteur hexadecimale winhex
il est vrai a l'offset 0x1200 hi est ecrit mais les autre offset sont devenu 0x00 tous donc lilo.exe ne s'execute pas
svp c'est quoi l'equivalent de (FSearch(FileN,FExpand(FileN))='' en c
-
-
J'avoue ne pas connaitre suffisamment le C pour te dire quel équivalent utiliser.
Regarde les explications concernant FSearch et FExpand pour t'aider.