Folco: c'est pas un coup de poker, c'est garanti.
cette signature MAGIC_TSR n'apparait qu'au *début* d'un TSR, il est forcément suivi par le nom du TSR puis par le code de ce TSR. on ne lira jamais d'addresses non mappées.
la doc TIGCC est pas claire sur HeapEnd. Je pense que c'est un pointeur les derniers octets valides de la mémoire, et pas vers le premier octet au delà de la mémoire. Et comme la heap fait tout aligné sur 4 octets...
Surtout ce qui manque c'est la valeur de HeapEnd. Je suis sûr que ce n'est pas la fin de la RAM.
Sinon on a un bug et il faudrait commencer à HeapEnd - 4:
01 unsigned char* FindTSR(unsigned char* signature) {
02 unsigned char* end = (unsigned char*)HeapEnd() - 4; /*voire sizeof(uint32_t), mais bon, y'a déja des nombres en dur %) */
03
04 while (end) {
05 if (*end == ((MAGIC_TSR >> 24) & 0xff) &&
06 *(end+1) == ((MAGIC_TSR >> 16) & 0xff) &&
07 *(end+2) == ((MAGIC_TSR >> 8) & 0xff) &&
08 *(end+3) == ((MAGIC_TSR ) & 0xff) &&
09 !strncmp(end+4,signature,8))
10 {
11 return end;
12 }
13 end-=2;
14 }
15
16 return NULL;
17 }
et puis faut pas faire d'arithmétique void*

Comment c'est implémenté dans PedroM?