Я в недоумении, что делать, и я надеюсь, что кто-то может решить эту проблему или дать мне полезный совет.
Я пытаюсь добавить препроцессор и соответствующий плагин обнаружения в Snort.
(Включая препроцессор был без ошибок, но бесполезен без соответствующего плагина обнаружения)
Я уже включил необходимые части кода в исходные файлы и скопировал все необходимые файлы в нужное место.
«Настройка» выполняется без ошибок:
./configure --enable-sourcefire --enable-targetbased
Но, когда я делаю make
я получаю следующую ошибку:
plugbase.o: In function 'RegisterRuleOptions':
../snort-2.9.3.1/src/plugbase.c:199: undefined reference to 'SetupProfi'
collect2: error: ld returned 1 exit status
Вот важная часть моего plugbase.c
:
/* built-in detection plugins */
#include "detection-plugins/sp_profinet_func.h"...
...
...
void RegisterRuleOptions(void)
{
LogMessage("Initializing Plug-ins!\n");
SetupProfi();
}
Файлы sp_profinet_func.c
а также sp_profinet_func.h
находятся в src/detection-plugins
,
Это код sp_profinet_func.h
:
#ifndef __SP_PROFINET_H__
#define __SP_PROFINET_H__
void SetupProfi(void);
#ifdef DETECTION_OPTION_TREE
u_int32_t SpProfinetFunctionCodeCheckHash(void *d);
int SpProfinetFunctionCodeCheckCompare(void *l, void *r);
#endif
#endif /* __SP_PROFINET_H__ */
А вот выдержка из sp_profinet_func.c
:
void SetupProfi(void)
{
printf("RULES-SetupProfi");
/* map the keyword to an initialization/processing function */
RegisterRuleOption("Profinet_func", SpProfinetFunctionCodeInit, NULL, OPT_TYPE_DETECTION, NULL);
}
Я относительно новичок в программировании и компиляции C / C ++.
Я уже выяснил, что эта ошибка может означать проблему со связыванием, но я не знаю, как ее исправить.
Кто-нибудь знает, как решить эту проблему и запустить плагин обнаружения?
Операционная система — Debian 7.8, и я использую Snort-Version 2.9.3.1 по рекомендации разработчика плагинов.
Заранее спасибо!
\Крис
Я решил проблему самостоятельно.
Спасибо @ RP и @ Pandrei за подсказку взглянуть на Makefile.
После ./configure
я посмотрел на Makefile
(src / detection-plugins) и увидел, что не было объявления sp_profinet_func.c sp_profinet_func.h
под «am_libspd_a_SOURCES_DIST», а также нет sp_profinet_func.$(OBJEXT)
под «am_libspd_a_OBJECTS».
Я просто добавил эти декларации и сделал make
а также sudo make install
и теперь препроцессор и плагин обнаружения работают.
Спасибо за ваши старания.
\Крис