Citation :
Sinon c'est possible de lire n'importe quelle adresse mais c'est du code cochon qui va dépendre de l'os utilisé ( plus facile avec 95/98 )
|
Y'a des drivers qui existent et qui permettent de faire ca. J'en connais un qui permet de lire + écrire sur n'importe quel port et n'importe quelle adresse mémoire sous 9x mais aussi NT. Je crois qu'il faut etre admin sous NT ... (ou alors installer le driver en tant qu'admin et apres c'est bon)
C'est pas du code cochon, je rêve même d'être capable d'écrire ça un jour.
Apres, sous 98, il est possible en effet de bidouiller, en assembleur, pour exploiter une faille de protection de cet OS et faire passer le code de son executable en ring0, ce qui est théoriquement impossible sous Windows (seuls les drivers dll + vxd le peuvent). Ca oui c'est plutôt cochon dans le sens ou c'est pas du tout ce qui est préconisé.
va sur ce site : http://www.internals.com
Ca s'appelle winio.
Si le code asm pour passer en ring0 t'intéresse, un exemple pas mal ici :
http://progzone.free.fr/basniveau/ring0/ring0.htm
Citation :
ok...Mais alors comment tu fais pr accéder à des données comme (par ex.) le type de ton proc sans passer par des variables globales ?
|
Je comprend pas la question ... qu'entends tu par type de ton proc ?
Et je pense que tu confonds une variable globale qui est accessible partout au sein d'UN programme et variable partagée entre plusieurs programmes.
C'est simple, c'est la communication inter-processus. (IPC)
Y'a pas mal de thechniques ... semaphores, pipes, file mapping ... et aussi messages.
Je pense que dans ton cas un message serait l'idéal.
Renseigne toi sur RegisterWindowMessage (via MSDN ou win32.hlp)
Sinon, le type de programme si c'est "concole" ou "GUI", c'est contenu dans l'exe lui meme. Documente toi sur le format PE. J'avais croisé un code qui se chargeait de ca, attends voir ...
A partir de GetModuleHandle ou directement depuis le HINSTANCE si t'es dans WinMain, tu te ballades au fil des sections de ton exe.
Regarde dans Winnt.h pour la définition des sections + constantes.
A savoir IMAGE_SUBSYSTEM_WINDOWS_GUI et IMAGE_SUBSYSTEM_WINDOWS_CUI dans ton cas.
Je crois que c'est le champ Subsystem de IMAGE_OPTIONAL_HEADER32 qui contient ca.
Voici le code qui cherche la version du linker pour te donner un exemple :
Code :
- void GetLinkerVersion()
- {
- PIMAGE_DOS_HEADER pidh;
- PIMAGE_NT_HEADERS pinh;
- pidh = (PIMAGE_DOS_HEADER) GetModuleHandle(NULL);
- if ( pidh->e_magic != IMAGE_DOS_SIGNATURE || pidh->e_lfanew == 0)
- return;
- pinh = (PIMAGE_NT_HEADERS)(((PBYTE)pidh) + pidh->e_lfanew);
- verMajor = pinh->OptionalHeader.MajorLinkerVersion;
- verMinor = pinh->OptionalHeader.MinorLinkerVersion;
- }
|
---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite