Udostępnij za pośrednictwem


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.

Zobacz też

Inne zasoby

Pisanie debugowanie funkcji punktów zaczepienia

crt_dbg2 Sample