Как обнаружить утечку памяти при использовании openssl - PullRequest
0 голосов
/ 03 декабря 2018

Я разрабатываю несколько модулей для проверки подписи с ++ в linux.И я тестирую и отлаживаю его в visual studio 2015. Но для тестирования утечки памяти я не знаю, как его обнаружить.

Сначала я попытался использовать vld.h и crtdbg.h,оба они не могут обнаружить утечку памяти элементов openssl, таких как Bio *.или X509 *.Существуют ли другие инструменты для поддержки обнаружения утечки памяти элементами openssl ??

Конечно, я пытался использовать "int CRYPTO_mem_leaks (Bio *)", но он определен как комментарии, как показано ниже, а в визуальной студии я не знаюсделать их активными.как:

# ifndef OPENSSL_NO_CRYPTO_MDEBUG
#  define OPENSSL_mem_debug_push(info) \
    CRYPTO_mem_debug_push(info, OPENSSL_FILE, OPENSSL_LINE)
#  define OPENSSL_mem_debug_pop() \
    CRYPTO_mem_debug_pop()
int CRYPTO_mem_debug_push(const char *info, const char *file, int 
line);
int CRYPTO_mem_debug_pop(void);
void CRYPTO_get_alloc_counts(int *mcount, int *rcount, int *fcount);

/*-
 * Debugging functions (enabled by CRYPTO_set_mem_debug(1))
 * The flag argument has the following significance:
 *   0:   called before the actual memory allocation has taken place
 *   1:   called after the actual memory allocation has taken place
 */
void CRYPTO_mem_debug_malloc(void *addr, size_t num, int flag,
    const char *file, int line);
void CRYPTO_mem_debug_realloc(void *addr1, void *addr2, size_t num, 
int flag,
    const char *file, int line);
void CRYPTO_mem_debug_free(void *addr, int flag,
    const char *file, int line);

int CRYPTO_mem_leaks_cb(int (*cb) (const char *str, size_t len, void *u),
                    void *u);
#  ifndef OPENSSL_NO_STDIO
int CRYPTO_mem_leaks_fp(FILE *);
#  endif
int CRYPTO_mem_leaks(BIO *bio);
# endif

1 Ответ

0 голосов
/ 04 декабря 2018

Из документации для CRYPTO_set_mem_functions () :

Если выделения не были выполнены, можно «заменить» реализации по умолчанию для OPENSSL_malloc (), OPENSSL_reallocи OPENSSL_free () и замените их альтернативными версиями (хуки).Функция CRYPTO_get_mem_functions () заполняет заданные аргументы указателями функций для текущих реализаций.С CRYPTO_set_mem_functions (), вы можете указать другой набор функций.Если любое из m, r или f равно NULL, функция не изменяется.

Вы можете использовать этот механизм для вставки собственных функций отслеживания выделения памяти или для творческого подхода к точкам останова, если вы подозреваетеопределенные проблемы при определенных обстоятельствах.При работе с Windows вы можете вызывать функции _malloc_dbg () , _realloc_dbg () и _free_dbg () изнутри этих хуков.

ПодробнееВ общем, отладчик Visual Studio и библиотека времени выполнения C (CRT) могут помочь вам обнаружить и идентифицировать утечки памяти .Это лучшая отправная точка, на мой взгляд.Чтение страницы от начала до конца даст вам множество инструментов для решения проблемы утечки памяти.

Чтобы получить полное представление, ознакомьтесь с кодом OpenSSL и получите полные возможности отладки, вероятно, лучше восстановитьваши библиотеки OpenSSL локально с включенной отладкой (если вы еще этого не сделали).

...