Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

EXE_DOS_INFO


Information sur la source

Catégorie :Système Niveau : Débutant Date de création : 17/07/2004 Date de mise à jour : 20/07/2004 18:02:44 Vu / téléchargé: 3 992 / 371

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (42)
Ajouter un commentaire et/ou une note

Description

SALUT tous le monde voila ceci et un  tutorial complet(document + source + exe + exemple + aide )sur les executable Dos :)


ce tutorial vous presente d'abord la Structure d'un fichier .EXE puis son header(en-tete) + quelque astuce et explication ensuite vous trouverai la  source qui est bien structuré et tres bien commenté (il y a + de commentaire que de sources).

aller hop  en commence ;)
Telecharger le zip


 

Source

Conclusion

Ceci marche que avec les executable dos
------------

 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

17 juillet 2004 23:19:32 :
version qui marche ;)
20 juillet 2004 18:02:44 :
voila version corrgier remplacement des bites par bytes :D

Commentaires et avis

signaler à un administrateur
Commentaire de xarier le 17/07/2004 16:20:53

aller j'attend vos commentaire 0_O :)

signaler à un administrateur
Commentaire de djl le 17/07/2004 16:31:45

ton programe est fait pour fonctionné sous dos ?
ta structure est mal aligné en 32 bits

signaler à un administrateur
Commentaire de xarier le 17/07/2004 16:36:02

non il marche  sous windows
djl->ta structure est mal aligné en 32 bits
j'ai pas compris

ah oui je voulait remercier funto :)

signaler à un administrateur
Commentaire de djl le 17/07/2004 16:40:49

struct EXEHEADER
{
  char id[2];
  unsigned lngf; // l'offset de lngf est +4 et non +2
...
}

donc tu lira bien les 2 premiers octets, mais ceux d'apres seront decaler de 2 octets

signaler à un administrateur
Commentaire de xarier le 17/07/2004 16:46:59

pardon mais j'ai pas bein compris ce que tu veut dire
mais je suis sur que ca marche car voila :

tu peut recupéré la taille de l'exe que avec les 2 premiere unsigned(si tu astuce j'espere que ta lut la doc ) alors quand j'ai essayer d'appliquer l'astuce ca marche sur n'importe quel exe .

mais stp tu peut m'expliquer ce que tu veut dire par :

donc tu lira bien les 2 premiers octets, mais ceux d'apres seront decaler de 2 octets

?

Merci encore
en faite tu ma pas dit comment ta compiler le programme (car tu c mo prob);)

signaler à un administrateur
Commentaire de BlackGoddess le 17/07/2004 16:53:45

DLL : les librairies dynamiques
CPL : les items du panneau de configuration
OCX : les contrôles ActiveX
SCR : les écrans de veille

=> sous dos ??????????????

signaler à un administrateur
Commentaire de xarier le 17/07/2004 16:57:40

voila pardon je reexplique j'avait fait une fot

____Programme dos__
EXE : les programmes
SYS : les drivers
_____Programme qui peuvet etre lut avec ____
DLL : les librairies dynamiques
CPL : les items du panneau de configuration
OCX : les contrôles ActiveX
SCR : les écrans de veille
EXE : les programmes
SYS : les drivers

c parce que il ont le meme debut du header :)

signaler à un administrateur
Commentaire de djl le 17/07/2004 16:58:35

ca marche, mais dans la structure du fichier il y a alors 2 octets de bourrage apres la signature

quand tu declare la structure

struct EXEHEADER
{
  char id[2];
  unsigned lngf;
...
}

id à une taille de 2 octets, et l'offset suivant est donc +2
lngf à une taille de 4 octets, son adresse doit etre alors un multiple de 4, donc forcement celle de id + 4 et non +2

execute ce code, la structure est cencée avoir un poids de 50 octets, tu verra que sizeof retourne bien 52 octets

#include <stdio.h>

struct EXEHEADER
{
char id[2];
unsigned lngf;
unsigned size;
unsigned nreloc;
unsigned headersize;
unsigned minpara;
unsigned maxpara;
unsigned SS ;
unsigned SP;
unsigned checksum;
unsigned IP;
unsigned CS;
unsigned relocoff; /* a ce niveau, 50 octets */
/* unsigned char overlay; */
};

int main()
{

printf("%i\n", sizeof( struct EXEHEADER) );

}

signaler à un administrateur
Commentaire de xarier le 17/07/2004 17:05:04

tu c que je peut pas executé au mon poste plante :p


mais une question pourkoi ta dit que
id à une taille de 2 octets, et l'offset suivant est donc +2
lngf à une taille de 4 octets ?
j'ai pas trop comprie :~(
pardon

signaler à un administrateur
Commentaire de BruNews le 17/07/2004 17:08:27 administrateur CS

#pragma pack

signaler à un administrateur
Commentaire de xarier le 17/07/2004 17:10:47

voila
00h Signature 'MZ' (parfois 'ZM')    Word
02h Nombres total des bites dans le dernier seteurWord
alors la le prog prend les deux premirre caractaire et les stoke dans char id[2]
et puis il prend les autre octé (d'une taille de unsgeind = word)et voila ansi de suite ;-)

signaler à un administrateur
Commentaire de djl le 17/07/2004 17:11:42

lis ca

http://msdn.microsoft.com/library/fre/default.asp?url=/library/FRE/vccore/html/_core_Structure_Alignment.asp

signaler à un administrateur
Commentaire de djl le 17/07/2004 17:16:10

xarier > execute ce code, tu verra ;)

#include <stdio.h>
#include <string.h>

struct EXEHEADER
{
char id[2];
unsigned lngf;
unsigned size;
unsigned nreloc;
unsigned headersize;
unsigned minpara;
unsigned maxpara;
unsigned SS ;
unsigned SP;
unsigned checksum;
unsigned IP;
unsigned CS;
unsigned relocoff; /* a ce niveau, 50 octets */
/* unsigned char overlay; */
};


int main()
{

struct EXEHEADER s;

s.id[0]="B";
s.id[1]="B";

s.lngf=555555;

printf("offset +2 %d\n", *(int *)((char *)&s + 2) );
printf("offset +4 %d\n", *(int *)((char *)&s + 4) );

}

signaler à un administrateur
Commentaire de xarier le 17/07/2004 17:20:21

pardon djl mais je t dit que je peut pas compiler tu c les prob que j'ai alors tu peut me dire ce que ca renvoie et c koi la difference entre mon code et le tien :)
Merci D'avance

L'homme aprend en ecoutant les autre

signaler à un administrateur
Commentaire de djl le 17/07/2004 17:23:00

c'est
printf("offset +4 %d\n", *(int *)((char *)&s + 4) );

qui renvoi 555555 et pas

printf("offset +2 %d\n", *(int *)((char *)&s + 2) );
  

signaler à un administrateur
Commentaire de xarier le 17/07/2004 17:48:18

pardonais moi encore je c que j'enerve commenca mais je tien a tous comprend voila :
tu ma dit que les 2 octé de bourrage ne sans specifie ben je vois pas ou sont c 2 octé voila

00h Signature 'MZ' (parfois 'ZM') Word

02h Nombres total des bites dans le dernier seteur Word

04h total des secteurs(1 secteur = 512 bites) Word

alors je stoke les deux premiere caractaire dans le s.id

puis je prend rempli id.lngf par la taille d'un unsigned qui equale a la taille d'un word et ansi de suite je vois pas ou j'ai oublait les 2 octé ?
Merci de m'expliquer (clairement ) car j'ai pas bien comprie(soit je devein con soit....je c plus ce qui m'arrive)

je suis sur que c une petit erreur ou j'ai pas fait attention ou comprie mais je vous prie de bien vouloir m'
expliquez depuis la base :)

:)

signaler à un administrateur
Commentaire de djl le 17/07/2004 17:59:00

non ta raison, d'apres ca :


"00h Signature 'MZ' (parfois 'ZM') Word

02h Nombres total des bites dans le dernier seteur Word

04h total des secteurs(1 secteur = 512 bites) Word"

il n'y a pas 2 octet de bourrage, mais ta structure ne correspond pas à ca


"la taille d'un unsigned qui equale a la taille d'un word" voila ton erreur, un word c'est 16 bits, pas 32 bits comme un unsigned
n'est ce pas BruNews ?

ta structure devrait plutot ressembler à

struct EXEHEADER
{
char id[2];
unsigned short lngf;
unsigned short size;
...
}

et la aucun problemes d'alignement

signaler à un administrateur
Commentaire de djl le 17/07/2004 18:16:42

xarier  > ta structure est completement fausse

il n'y a que des words, toi tu lis des long, donc ton programme est forcement faux

la structure est definie dans winnt.h

tu comprends ?

regarde ce lien
http://minso.free.fr/cavinfo/systeme/executable.html

signaler à un administrateur
Commentaire de djl le 17/07/2004 18:18:05


"autre chose ta dit que je perd 2 oct (ben je pense que c plus :) )"

tu perds 2 octets + les 3 octets de bourrage qui suivent le dernier attribut pour revenir à une adresse multiple de 4, c'est pour ca d'ailleur que je l'avais commenté

signaler à un administrateur
Commentaire de vecchio56 le 17/07/2004 18:25:04 administrateur CS

désolé de déranger

J'ai téléchargé FMOD il y a certain temps et c'est déja la 3.7.3.0.
Et puis autre petite remarque, il n'y a pas de 'e' à la fin du mot bit

signaler à un administrateur
Commentaire de djl le 17/07/2004 18:29:53

xarier >
ca depend de la structure

la structure _IMAGE_DOS_HEADER  definie dans winnt.h est parfaitement alignée, donc pas d'octet de perdu si tu l'a bien definie

signaler à un administrateur
Commentaire de xarier le 17/07/2004 20:29:56

ben au debut de la structure il a des WORD alors que moi j'ai  un char [2]
ensuite eux il mette des word et moi des unsigned short

alors je pense que c la meme chose :)

signaler à un administrateur
Commentaire de djl le 17/07/2004 20:34:51

pour le char[2] c'est la meme chose mais tu peux mettre un word

unsigned short id;

apres pour lire le premier caractere tu fais

*((char *)&id)
et pour le deuxieme

*((char *)&id +1 )

signaler à un administrateur
Commentaire de BruNews le 17/07/2004 20:35:55 administrateur CS

histoire de #define, strictement identique.
char[2] et WORD identiques.

signaler à un administrateur
Commentaire de xarier le 17/07/2004 23:22:13

Version mise a jour et optimizé merci a tous l'exe fait 9Ko !!!!

aller tester j'ai meme ajouter queque option de la lecture de la taille de fichier exe (sans api ) que avec la lecture des header ;)

aller retelecharger le ;) Yo
Merci a tous surtout a Djl :)
t sympa

signaler à un administrateur
Commentaire de djl le 18/07/2004 00:55:03

oui, mais c'etait quoi ton erreur alors ? pourquoi ca marchait pas ?

signaler à un administrateur
Commentaire de xarier le 18/07/2004 01:09:10

OKi j'explique ;)

voila premierement tavait raison il fallait mettre des
unsigned short
(secondo j'ai pas volu mettre la winnt car il va ajouter de la capacité et c pas propore a comprendre il vos mieux creé son propre type)
2eme l'exe qui a eté livré n'est t pas exe dos lol c eté un exe win (console) alors j'ai chercher ma disquete de demarage de windows 98 pour avoir un exe 100% dos puis j'ai volu tester l'astuce de la capacité pour etre sur que ca marche ensuite j'a ifait quelque modification au niveau du code (+ options + hexadicimal ..)

signaler à un administrateur
Commentaire de djl le 18/07/2004 09:09:27

"tu mavait dit en haut que la taille de la structure dois etre 50 octes pourkoi au juste ? autre chose quand je mettait pas les unsigned short j'avait 52 Oct et la en les mettan j'ai que 28 je comprend plus rien tu peut m'expliquer :)"


la structure devait faire 50 octet car en additionnant la taillle des membre ca donne 50 octets :  2 octet pour id + 12 * 4 octets pour les 12 unsingned qui suivent, soit 2 + 48 = 50 octets

si tu remplace les unsigned (4 octets) par des unsigned short (2 octet) ca fait alors 2 + 12 *2 = 26  + 2 octet de bourrage à la fin = 28

signaler à un administrateur
Commentaire de xarier le 18/07/2004 14:09:34

oui merci djl j'avait comprie ca hier car le cours de c++ que j'avait etait tout fau il disait que les
short = 16 octets t'andit que short = 16 bits  qui fat que short = 4 octets
Encore Merci
Apart ca t'a aimmer le prog ? ;)

signaler à un administrateur
Commentaire de djl le 18/07/2004 14:12:41

oui, j'ai trouvé ca interressant

signaler à un administrateur
Commentaire de _Jonathan le 19/07/2004 22:41:32

genial ton truc, sa peut etre utile pour les debutants com' moi ;)

8/10

signaler à un administrateur
Commentaire de xarier le 19/07/2004 23:15:31

Merci Jonathan

signaler à un administrateur
Commentaire de Arnotic le 20/07/2004 17:06:55 administrateur CS

1 truc reste très choquant :

X bites ! ! ! ! ! !

X bit (oki je connais)
X bytes (oki je connais aussi cela correspand à un 1 octets soit 8 bit)


mais bites là c'est grave

signaler à un administrateur
Commentaire de oublie le 20/07/2004 17:33:50

:D
lol j'ai pas fait attention

est en plus j'ai mis bcp de bites lol a la place de bytes voila je v corriger ca

Merci arnotic

signaler à un administrateur
Commentaire de Arnotic le 20/07/2004 17:40:59 administrateur CS

de rien ;-)

signaler à un administrateur
Commentaire de xarier le 20/07/2004 17:54:34

salut stp arnotic voila je v regler ca mais stp j'ai une petit question je suis au cyber moi et ce oublie car c un ami a moi je c pas pourkoi quand il a deux compte qui sont activer dans le meme cyber alors des fois c moi qui ecrit a ca affiche que c lui .... est ce que c un prob qui vient de la configuration du cyber ou celle de cppfrance ? Merci

signaler à un administrateur
Commentaire de Arnotic le 20/07/2004 17:59:20 administrateur CS

du cyber là, car ici dans mon réso j'ai plusieurs personnes sur cs avec des comptes et ca marche

signaler à un administrateur
Commentaire de xarier le 20/07/2004 18:02:06

oki merci je v mettre le programme en mise a jour dans 3 min

signaler à un administrateur
Commentaire de xarier le 20/07/2004 18:03:19

voila c mise a jour
remplacement de bites par bytes :D

signaler à un administrateur
Commentaire de xarier le 20/07/2004 18:05:31

alors arnotic a part ca ta aimmer le prog ?
;)

signaler à un administrateur
Commentaire de Arnotic le 20/07/2004 18:51:58 administrateur CS

ouai mais perso j'ai "mieux", qui lise l'export table, l'import table, qui permette de rajouter des sections ... j'avais fait un tut sur le format PE sur Developers Assoc.

signaler à un administrateur
Commentaire de xarier le 20/07/2004 18:55:52

oui moi aussi j'ai commencer a ca mais j'ai pas terminé

j'avait presque fini mais j'ai recontrer un prog avec mon vc++ alors la je me suis arreter

Merci et pour ton trucs de Developers Asoociation tu peut me le filler (le lien et si c possible la source :) )

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,499 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.