Traduire pascal en c help
zilot2
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
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.
A voir également:
- Traduire pascal en c help
- Turbo pascal - Télécharger - Édition & Programmation
- My pascal - Télécharger - Édition & Programmation
- Comment traduire un site en français - Guide
- Dev pascal - Télécharger - Édition & Programmation
- Traduire image - Guide
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