Ceci est une ancienne révision du document !



#include <iostream> #include <windows.h>

void WriteMemory(HANDLE process, DWORD address, int value) {

  DWORD oldProtect;
  VirtualProtectEx(process, (LPVOID)address, sizeof(int), PAGE_EXECUTE_READWRITE, &oldProtect);
  WriteProcessMemory(process, (LPVOID)address, &value, sizeof(int), NULL);
  VirtualProtectEx(process, (LPVOID)address, sizeof(int), oldProtect, &oldProtect);

}

int main() {

  DWORD pid; // ID de processus du jeu
  HANDLE process;
  DWORD ammoAddress = 0x00ABCDEF; // Adresse mémoire trouvée avec Cheat Engine
  int infiniteAmmoValue = 9999; // Valeur pour munitions infinies
  std::cout << "Entrez l'ID du processus de Bodycam : ";
  std::cin >> pid;
  // Ouvrir le processus du jeu
  process = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
  if (process == NULL) {
      std::cerr << "Échec de l'ouverture du processus." << std::endl;
      return 1;
  }
  // Écrire la valeur infinie dans la mémoire
  WriteMemory(process, ammoAddress, infiniteAmmoValue);
  CloseHandle(process);
  std::cout << "Munitions infinies activées." << std::endl;
  return 0;

}

La première des choses est d'avoir un code, ici en C, compilable. Si vous n'en avez pas voici un code à copier-coller dans un fichier (de préférence "main.c")

#include <stdio.h>
 
int main ()
  {
    printf("Bonjour linuxien !\n");
    return 0;
  }

Vous pouvez compiler le code suivant pour vérifier le fonctionnement des appels windows :

#include <windows.h>
 
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    LPSTR lpCmdLine, int nCmdShow)
{
  MessageBoxW(NULL,
    L"Cette fenêtre prouve que le cross-compilateur est fonctionnel !",
    L"Hello World", MB_OK);
  return 0;
}

Installer MingW32

Pour compiler en 32 bits, installer la version 64 bits ci-dessous et remplacer tous les « x86_64-w64-mingw32-gcc » par « i686-w64-mingw32-gcc ».

Installer Mingw64

installer gcc-mingw-w64.

En ligne de commande cela donne :

sudo apt install gcc-mingw-w64

x86_64-w64-mingw32-gcc -o bonjour.exe main.c

Compiler en ligne de commande

x86_64-w64-mingw32-gcc -o bonjour.exe main.c
Le nom de l'exécutable est bonjour.exe arbitrairement pour distinguer les exécutables Linux des exécutables Windows mais ce n'est absolument pas obligatoire sur Linux

TADA ! un bel exécutable fut créé dans le dossier courant, faites

file bonjour.exe # permet de voir le type de fichier

C'est bel est bien un exécutable Windows s'il possède Windows dans sa description.

Vous venez de créer un exécutable pour Windows.

Le « makefile »

make est un utilitaire pour "scripter" la compilation et l'édition de liens Sa syntaxe est au premier abord déroutante… Il permet de grandement simplifier la compilation, car il suffira de lancer la commande make pour compiler votre programme.

Créons maintenant un fichier makefile dans le même dossier que « main.c »:

# Makefile : build exécutable Windows
w-exe: main.c
	x86_64-w64-mingw32-gcc -o main.exe main.c

Note : Il y a une tabulation et pas une suite d'espaces devant « x86_64-w64-mingw32-gcc » sur la 3ème ligne de l'exemple. Cette tabulation est obligatoire. Attention aux logiciels de traitement de texte qui remplacent, par défaut, les tabulations par des espaces.

Pour l'exécuter tapez (une fois placé le répertoire de votre projet) :

make

Utilisez wine, un émulateur avec Windows ou Windows lui-même.

wine main.exe

on accueil vos erreurs sur le forum et nous mettrons les solutions ici

Vous pouvez maintenant créer des exécutables Windows depuis Linux : il vous suffit simplement de remplacer lors de vos compilations « gcc » par « x86_64-w64-mingw32-gcc » et « g++ » par « x86_64-w64-mingw32-g++ ».

N'oubliez pas cependant que les programmes seront bien plus gros en taille que ceux produits pour Linux ou par Microsoft Visual Studio. Ceci est dû au fait que la bibliothèque standard doit être liée statiquement avec l'exécutable.


Contributeurs : hind_flo, Ner0lph, amiralgaby (éditions mineures), DarkShade

  • tutoriel/comment_utiliser_mingw32_pour_faire_des_executables_windows.1724193271.txt.gz
  • Dernière modification: Le 21/08/2024, 00:34
  • par 74.56.181.71