EXE_DOS_INFO

xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005 - 17 juil. 2004 à 16:20
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005 - 20 juil. 2004 à 18:55
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/24652-exe-dos-info

xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
20 juil. 2004 à 18:55
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 :) )
cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012
20 juil. 2004 à 18:51
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.
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
20 juil. 2004 à 18:05
alors arnotic a part ca ta aimmer le prog ?
;)
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
20 juil. 2004 à 18:03
voila c mise a jour
remplacement de bites par bytes :D
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
20 juil. 2004 à 18:02
oki merci je v mettre le programme en mise a jour dans 3 min
cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012
20 juil. 2004 à 17:59
du cyber là, car ici dans mon réso j'ai plusieurs personnes sur cs avec des comptes et ca marche
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
20 juil. 2004 à 17:54
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
cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012
20 juil. 2004 à 17:40
de rien ;-)
cs_oublie Messages postés 16 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 20 avril 2005
20 juil. 2004 à 17:33
: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
cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012
20 juil. 2004 à 17:06
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
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
19 juil. 2004 à 23:15
Merci Jonathan
s@ldon Messages postés 140 Date d'inscription samedi 1 novembre 2003 Statut Membre Dernière intervention 30 septembre 2009 3
19 juil. 2004 à 22:41
genial ton truc, sa peut etre utile pour les debutants com' moi ;)

8/10
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
18 juil. 2004 à 14:12
oui, j'ai trouvé ca interressant
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
18 juil. 2004 à 14:09
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 ? ;)
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
18 juil. 2004 à 09:09
"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
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
18 juil. 2004 à 01:09
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 ..)
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
18 juil. 2004 à 00:55
oui, mais c'etait quoi ton erreur alors ? pourquoi ca marchait pas ?
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
17 juil. 2004 à 23:22
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
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
17 juil. 2004 à 20:35
histoire de #define, strictement identique.
char[2] et WORD identiques.
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
17 juil. 2004 à 20:34
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 )
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
17 juil. 2004 à 20:29
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 :)
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
17 juil. 2004 à 18:29
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
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
17 juil. 2004 à 18:25
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
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
17 juil. 2004 à 18:18
"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é
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
17 juil. 2004 à 18:16
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
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
17 juil. 2004 à 17:59
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
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
17 juil. 2004 à 17:48
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 :)

:)
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
17 juil. 2004 à 17:23
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) );
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
17 juil. 2004 à 17:20
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
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
17 juil. 2004 à 17:16
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) );

}
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
17 juil. 2004 à 17:11
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
17 juil. 2004 à 17:10
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 ;-)
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
17 juil. 2004 à 17:08
#pragma pack
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
17 juil. 2004 à 17:05
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
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
17 juil. 2004 à 16:58
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) );

}
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
17 juil. 2004 à 16:57
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 :)
BlackGoddess Messages postés 338 Date d'inscription jeudi 22 août 2002 Statut Membre Dernière intervention 14 juin 2005
17 juil. 2004 à 16:53
DLL : les librairies dynamiques
CPL : les items du panneau de configuration
OCX : les contrôles ActiveX
SCR : les écrans de veille

=> sous dos ??????????????
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
17 juil. 2004 à 16:46
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);)
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
17 juil. 2004 à 16:40
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
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
17 juil. 2004 à 16:36
non il marche sous windows
djl->ta structure est mal aligné en 32 bits
j'ai pas compris

ah oui je voulait remercier funto :)
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
17 juil. 2004 à 16:31
ton programe est fait pour fonctionné sous dos ?
ta structure est mal aligné en 32 bits
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
17 juil. 2004 à 16:20
aller j'attend vos commentaire 0_O :)
Rejoignez-nous