[#3]
Re: Kontrolowana jazda po pamieci
@MDW,
post #1
Odpowiedź jest dość zaskakująca, otóż dokładnie... nie da się tego wyśledzić. Możliwe są jedynie pewne półśrodki.
1. Mungwalling pamięci - otaczasz każdą alokację "ścianą" o zadanej grubości, wypełnioną zdefiniowanym wzorem. Przy zwalnianiu ściana sprawdzana jest, czy wzór nie został naruszony. Pod MOS-em wystarczy zlinkować program z reslib Morgotha - patchuje wszystkie systemowe funkcje alokacji, przy okazji wyłapuje błędne FreeMem()-y i inne takie. Niestety mungwalling wykrywa tylko i wyłącznie wyjechanie w pobliżu zaalokowanego obszaru (zależnie od grubości ściany), czyli typowe wyjechanie poza bufor, albo rzeczy w rodzaju buf[-1].
2. Invzeropage - jest to flaga przy bootowaniu MOS-a, która powoduje że pod adres 0 wpisywana jest wartość nie będąca prawidłowym adresem pamięci. Dzięki temu każda próba odwołania się do zerowego wskaźnika powoduje natychmiastowe wywalenie się programu i odpowiedniego hita w debuglogu. Niestety ta flaga chyba nie istnieje w publicznym kernelu MOS-a (proszę mnie poprawić jeżeli się mylę). Bez tej flagi pod adresem 0 jest przeważnie 0, co nie daje natychmiastowego przerwania programu, a może dawać różne dziwne efekty, bo np. odwołanie się do NULL-a z offsetem 4 da nam ExecBase...