IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Convertir code C++ en C#


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 96
    Par défaut Convertir code C++ en C#
    Bonjour,

    J'ai un code en c++ qu'on ma donné et j'ai besoin de le convertir en c#.

    Voici le code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
     
    #define _WIN32_WINNT 0x501
    #define WIN32_LEAN_AND_MEAN
    #include <windows.h>
    #include <iostream>
    #include <stdio.h>
    #include <stdlib.h>
    #include <Tlhelp32.h>
    using namespace std;
    HANDLE hProc;
    DWORD GetProcessId (char *prcName)
    {
        PROCESSENTRY32 procEntry;
        BOOL            working=0;
        DWORD            targetPid=0;
        HANDLE snapshot =CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS ,0);
        procEntry.dwSize=sizeof(PROCESSENTRY32);
        if (Process32First(snapshot,&procEntry) )
        {
            do
            {
                if(stricmp(procEntry.szExeFile,prcName)==0)
                {
                    CloseHandle(snapshot);
                    return procEntry.th32ProcessID;
                }                               
            }
            while (Process32Next(snapshot,&procEntry));
        }
        CloseHandle(snapshot);
        return -1;
    }
     
    bool DebugPriviligesEnable()
    {
        HANDLE hToken;
        TOKEN_PRIVILEGES tokPriv;
        LUID dbgValue;
        if ( ! OpenProcessToken( GetCurrentProcess(),
            TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
            return false;
        if ( ! LookupPrivilegeValue( NULL, SE_DEBUG_NAME, &dbgValue ) ){
            CloseHandle( hToken );
            return false;
        }
        tokPriv.PrivilegeCount = 1;
        tokPriv.Privileges[0].Luid = dbgValue;
        tokPriv.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
        if ( ! AdjustTokenPrivileges( hToken, FALSE, &tokPriv, sizeof(tokPriv), NULL, NULL ) )
        {
            CloseHandle( hToken );
            return false;
        }
        return true;
    } 
     
    DWORD GetModuleBaseAddr(char* modName, DWORD procId)
    {
        HANDLE snapMod;  
        MODULEENTRY32 me32;
        snapMod = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, procId);  
        me32.dwSize = sizeof(MODULEENTRY32);  
        if (Module32First(snapMod, &me32)){ 
            do
            {
                if (stricmp(modName,me32.szModule) == 0){ 
                    CloseHandle(snapMod); 
                    return (DWORD) me32.modBaseAddr; 
                }
            }
            while(Module32Next(snapMod,&me32));
        }
        CloseHandle(snapMod); 
        return 0;  
    }
     
    DWORD GetIndex(DWORD BaseAddr)
    {
        DWORD ret;
        ReadProcessMemory(hProc,(LPVOID)(BaseAddr+0xACEA4C),&ret,sizeof(DWORD),NULL);
        return ret;
    }
    DWORD GetW3TlsForIndex(DWORD index,DWORD BaseAddr,DWORD pid)
    {
        THREADENTRY32 te32;
        HANDLE hSnap=CreateToolhelp32Snapshot( TH32CS_SNAPTHREAD, pid );
        te32.dwSize = sizeof(THREADENTRY32);
        if ( Thread32First( hSnap, &te32 ) )
        {
            do 
            {
                if ( te32.th32OwnerProcessID == pid )
                {
                    HANDLE hThread = OpenThread( THREAD_ALL_ACCESS, false, te32.th32ThreadID );
                    CONTEXT ctx = { CONTEXT_SEGMENTS };
                    LDT_ENTRY ldt;
                    GetThreadContext( hThread, &ctx );
                    GetThreadSelectorEntry( hThread, ctx.SegFs, &ldt );
                    DWORD dwThreadBase = ldt.BaseLow|(ldt.HighWord.Bytes.BaseMid<<16)|(ldt.HighWord.Bytes.BaseHi<<24);
                    CloseHandle( hThread );
                    if ( dwThreadBase == NULL )
                        continue;
                    DWORD dwTls;
                    ReadProcessMemory(hProc,(LPVOID)(dwThreadBase+0xE10+4*index),&dwTls,4,NULL);
                    printf("Thread: %X , TLS for index %X : %X\n",te32.th32ThreadID,index,(DWORD)dwTls);
                    if ( dwTls == NULL )
                        continue;
                    return (DWORD)dwTls;
     
                }
            } while( Thread32Next( hSnap, &te32 ) );
        }
        return NULL;
    }
    DWORD GetGameStateValue(DWORD TlsValue)
    {
    	DWORD rt;
        if(!ReadProcessMemory(hProc,(LPVOID)(TlsValue+0x0D*4),&rt,4,NULL))
        return -1;
        if(!ReadProcessMemory(hProc,(LPVOID)(rt+0x10),&rt,4,NULL))
        return -1;
        if(!ReadProcessMemory(hProc,(LPVOID)(rt+0x8),&rt,4,NULL))
        return -1;
        if(!ReadProcessMemory(hProc,(LPVOID)(rt+0x278),&rt,4,NULL))
        return -1;
    	return rt;
    }
    int main()
    {
     
        if(!DebugPriviligesEnable())
        {
            cout<<"Can't get debug privs, cant read wc3 memory buh bye!\n";
            system("PAUSE");
            return 0;
        }
        DWORD procId = GetProcessId("war3.exe");
        if(procId==-1)
        {
            cout<<"Can't get wc3 process id buh bye!\n";
            system("PAUSE");
            return 0;
        }
        hProc = OpenProcess(PROCESS_VM_READ|PROCESS_QUERY_INFORMATION,FALSE,procId);
        DWORD baseAddr= GetModuleBaseAddr("Game.dll",procId);
        if(!baseAddr)
        {
            cout<<"Can't get Game.dll base address buh bye!\n";
            CloseHandle(hProc);
            system("PAUSE");
            return 0;   
        }
        DWORD tlsIndex= GetIndex(baseAddr);
        DWORD tlsValue = GetW3TlsForIndex(tlsIndex,baseAddr,procId);
        DWORD GState=GetGameStateValue(tlsValue);
        cout<<"Game state is : "<<GState<<"\n";
        CloseHandle(hProc);
        system("PAUSE");
        return 0;
    }
    J'ai tenté de trouver de bonnes sources pour le convertir mais en vain. Pourriez vous me mettre sur des pistes afin que je puisse convertir ce code?

    Merci de votre aide.

  2. #2
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    salut

    je verrais bien de la classe Process en .Net pour récupérer des infos sur le process courant

    Après, on dirait que tu fais des bidouilles de lecture

    Si tu expliquais ce que fais le code , ca serait plus simple que de devoir le faire pour nous, pauvres béotiens

    De plus, remarque en passant, ya pas de commentaires dans ce code ? c'est affreux !

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 96
    Par défaut
    Merci! J'ai trouvé ce que j'avais de besoin.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Process[] liste_proc = Process.GetProcesses;
    foreach(proc_nom in liste_proc)
    {
        Consile.WriteIn(proc_nom.ProcessName);
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 21/05/2008, 11h20
  2. Convertir Code C++ en asm
    Par Sharpy dans le forum C++
    Réponses: 7
    Dernier message: 02/11/2007, 23h37
  3. convertir code php en asp
    Par goaim dans le forum ASP
    Réponses: 1
    Dernier message: 19/10/2006, 15h53
  4. Convertir code C en delphi
    Par jt-tronix dans le forum Langage
    Réponses: 12
    Dernier message: 29/03/2006, 20h55
  5. convertir code clavier en caractère
    Par danyboy85 dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 22/02/2006, 19h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo