Voila je voudrais embarquer une dll dans un executable, c est a dire la mettre en data dans mon fichier source, et la reecrire sur le disque dur a l execution.
Je suis oblige de proceder comme ca, car je veux qu il n y ait qu un seul fichier, et ma dll contient un hook, donc c est impossible a passer dans l exe.
j utilise pour transformer ma dll en data le programme ttbin2hex de la TI Chess Team qui me traduit ma dll en un tableau d entiers, mais dans le mauvais endian (et oui les TI89 c est en big endian, pas les PC...).
Les datas ressemblent a ca :
unsigned long dll_data[768] = {
0x4d5a9000,0x03000000,0x04000000, [...] };
et mon code pour passer d un endian a l autre est cette macro :
#define SWAP_LE_BE_LONG(val) ((long) ( (((long) (val) & (long) 0x000000ffU) << 24) | (((long) (val) & (long) 0x0000ff00U) << 8) | (((long) (val) & (long) 0x00ff0000U) >> 8) | (((long) (val) & (long) 0xff000000U) >> 24)))
Ma fonction pour l ecrire sur le disque dur est :
void write_lib(unsigned long int *data,int size,char *filename)
{
FILE *fd;
int i;
if((fd = fopen(filename,"wb")) == NULL)
return;
for(i=0;i<size;i++)
{
unsigned long tmp;
tmp = SWAP_LE_BE_LONG(data[i]);
fwrite(&tmp,1,4,fd);
}
fclose(fd);
}
Mais ca marche pas!! En fait mon fichier sur le disque dur n est pas le meme que celui en memoire, des 0x00 sont remplaces par des 0xFF.
Pourquoi et que faire??