Punkty zaczepienia alokacji i alokacja pamięci środowiska wykonawczego języka C
Ograniczenie bardzo ważne funkcje alokacji jest, że musi jawnie Ignoruj _CRT_BLOCK bloków (pamięci alokacji wewnętrznie przez funkcje biblioteki uruchomieniowej C) aby wszelkie wywołania funkcji biblioteki uruchomieniowej c przydzielić pamięć wewnętrzną._CRT_BLOCK Bloków można zignorować przez wraz z kodem, takich jak na początku przydziału użytkownika następujących hook funkcji:
if ( nBlockUse == _CRT_BLOCK )
return( TRUE );
Jeśli Twoje hak alokacji nie pomija _CRT_BLOCK blokuje, a następnie wszelkie funkcja biblioteki uruchomieniowej c wywoływana w sieci haka może zalewkować program w pętli nieskończonej.Na przykład printf sprawia, że wewnętrzna Alokacja.Jeśli hak kod wywołuje printf, a następnie wynikowa alokacji spowoduje, że Twoje hak ma być wywoływana ponownie, który będzie wywoływać printf ponownie, i tak dalej aż przepełnienie stosu.Jeśli trzeba raport _CRT_BLOCK operacji alokowania jeden sposób obejścia tego ograniczenia jest wykorzystanie funkcji API systemu Windows, a nie funkcje c run-time, formatowania i wyjście.Ponieważ interfejsy API systemu Windows należy używać sterty biblioteka uruchomieniowa C, będzie nie zalewki Twoje hak alokacji w pętli nieskończonej.
Jeśli bada się pliki źródłowe run-time library, zobaczysz że Alokacja domyślnego hook funkcji, CrtDefaultAllocHook (które zwraca po prostu TRUE), znajduje się w oddzielnym pliku własną, DBGHOOK.C.Jeśli chcesz, aby Twoje hak alokacji wywoływaną nawet dla alokacji kodu startowego, który jest wykonywany przed aplikacji główne funkcji, to domyślna funkcja można zastąpić jedną z własnych, a nie za pomocą _CrtSetAllocHook.