Skip to content

Commit fe5d165

Browse files
authored
Merge pull request #55 from ispras/FromTraceBack
Fix merge error for 1.3.1
2 parents 9c2b940 + ed0a970 commit fe5d165

File tree

11 files changed

+542
-529
lines changed

11 files changed

+542
-529
lines changed

README.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010

1111
# 1. Описание
1212

13-
FUTAG — это автоматизированный инструмент генерации фаззинг-целей для программных библиотек.
14-
В отличие от обычных программ, программная библиотека может не содержать точки входа и не принимать входные данные, поэтому создание вручную фаззинг-цели для анализа программных библиотек остается проблемой и требует ресурсов. Одним из решением данной проблемы является автоматизация процесса создания фаззинг-целей, что уменьшает количество затрачиваемых ресурсов.
13+
FUTAG — это автоматизированный инструмент генерации фаззинг-целей для библиотек.
14+
В отличие от обычных программ, библиотека может не содержать точки входа и не принимать входные данные, поэтому создание вручную фаззинг-цели для анализа библиотек остается проблемой и требует ресурсов. Одним из решением данной проблемы является автоматизация процесса создания фаззинг-целей, что уменьшает количество затрачиваемых ресурсов.
1515
FUTAG использует инструменты Clang и Clang LLVM в качестве внешнего интерфейса для анализа библиотек и генерации фаззинг-целей.
1616
FUTAG запускает статический анализ во время сборки библиотеки для поиска:
1717
- Зависимостей сущностей (типы данных, функции, структуры и т.д.) в исходном коде целевой библиотеки.
@@ -30,7 +30,7 @@ FUTAG запускает статический анализ во время с
3030
Вы можете попробовать собрать Futag с готовыми [Докер-файлами](https://github.com/ispras/Futag/tree/main/product-tests/build-test) для ОС Ubuntu.
3131

3232
## 2.2. Использование предварительно упакованного пакета
33-
- Загрузите последнюю версию [futag-llvm.1.3.tar.xz](https://github.com/ispras/Futag/releases/tag/1.3) и разархивируйте.
33+
- Загрузите последнюю версию [futag-llvm.1.3.1.tar.xz](https://github.com/ispras/Futag/releases/tag/1.3.1) и разархивируйте.
3434

3535
## 2.3. Сборка и установка из исходного кода
3636

@@ -75,7 +75,7 @@ FUTAG запускает статический анализ во время с
7575
- Предварительно должен быть установлен пакет futag-<версия>.tar.gz по пути futag-llvm/python-package/:
7676
```bash
7777
~$ pip install -r futag-llvm/python-package/requirements.txt
78-
~$ pip install futag-llvm/python-package/futag-1.3.tar.gz
78+
~$ pip install futag-llvm/python-package/futag-1.3.1.tar.gz
7979
```
8080

8181
- Запуск сборки, проверки и анализа
@@ -143,7 +143,7 @@ generator.compile_targets(
143143

144144
- C. T. Tran and S. Kurmangaleev, ["Futag: Automated fuzz target generator for testing software libraries"](https://ieeexplore.ieee.org/document/9693749) 2021 Ivannikov Memorial Workshop (IVMEM), 2021, pp. 80-85, doi: 10.1109/IVMEM53963.2021.00021.
145145

146-
- Исследования по автоматической генерации фаззинг-оберток для функций программных библиотек, Открытая конференция ИСП РАН им. В.П. Иванникова 2022
146+
- Исследования по автоматической генерации фаззинг-оберток для функций библиотек, Открытая конференция ИСП РАН им. В.П. Иванникова 2022
147147

148148
[![Видео](https://img.youtube.com/vi/qw_tzzgX04E/hqdefault.jpg)](https://www.youtube.com/watch?v=qw_tzzgX04E&t=28122s)
149149

product-tests/build-test/ubuntu22/Docker-test-build.Dockerfile

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,18 @@ RUN useradd -ms /bin/bash futag
1010
#Установка необходимых библиотек для futag
1111
RUN apt install -y libncurses5 gcc-multilib g++ make gdb binutils python3 git openssh-client cmake wget xz-utils python3 python3-pip texinfo
1212

13-
USER futag
13+
#USER futag
1414
WORKDIR /home/futag/
1515
RUN git clone --depth 1 https://github.com/ispras/Futag.git
1616
WORKDIR /home/futag/Futag/custom-llvm
17-
RUN ./prepare.sh
18-
WORKDIR /home/futag/Futag/build
19-
RUN ./build.sh
17+
#RUN ./prepare.sh
18+
#WORKDIR /home/futag/Futag/build
19+
#RUN ./build.sh
2020

21-
USER root
22-
WORKDIR /home/futag/Futag/
23-
RUN pip install futag-llvm/python-package/futag-1.3.tar.gz
24-
RUN pip install -r futag-llvm/python-package/requirements.txt
21+
#USER root
22+
#WORKDIR /home/futag/Futag/
23+
#RUN pip install futag-llvm/python-package/futag-1.3.1.tar.gz
24+
#RUN pip install -r futag-llvm/python-package/requirements.txt
2525

26-
USER futag
27-
WORKDIR /home/futag/Futag/
26+
#USER futag
27+
#WORKDIR /home/futag/Futag/

src/Checkers/lib/FutagCatchInfo.cpp

Lines changed: 35 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -45,57 +45,57 @@ namespace {
4545
AST_MATCHER(BinaryOperator, isAssignmentOp) { return Node.isAssignmentOp(); }
4646

4747
AST_MATCHER(UnaryOperator, isIncrementDecrementOp) {
48-
return Node.isIncrementDecrementOp();
48+
return Node.isIncrementDecrementOp();
4949
}
5050

5151
class FutagCatchInfo : public Checker<check::ASTDecl<FunctionDecl>> {
52-
public:
53-
string FuncName = "";
54-
unsigned int BeginLine = 0;
55-
unsigned int EndLine = 0;
56-
void checkASTDecl(const FunctionDecl *D, AnalysisManager &Mgr,
57-
BugReporter &BR) const;
52+
public:
53+
string FuncName = "";
54+
unsigned int BeginLine = 0;
55+
unsigned int EndLine = 0;
56+
void checkASTDecl(const FunctionDecl *D, AnalysisManager &Mgr,
57+
BugReporter &BR) const;
5858
};
5959

6060
} // namespace
6161

6262
void FutagCatchInfo::checkASTDecl(const FunctionDecl *func,
6363
AnalysisManager &Mgr, BugReporter &BR) const {
64-
if (Mgr.getSourceManager().isInSystemHeader(func->getBeginLoc()) ||
65-
!func->hasBody()) {
66-
return;
67-
}
68-
MatchFinder Finder;
64+
if (Mgr.getSourceManager().isInSystemHeader(func->getBeginLoc()) ||
65+
!func->hasBody()) {
66+
return;
67+
}
68+
MatchFinder Finder;
6969

70-
if (func->getNameAsString() != this->FuncName)
71-
return;
72-
clang::LangOptions lo;
73-
string out_str;
74-
llvm::raw_string_ostream outstream(out_str);
70+
if (func->getNameAsString() != this->FuncName)
71+
return;
72+
clang::LangOptions lo;
73+
string out_str;
74+
llvm::raw_string_ostream outstream(out_str);
7575

76-
// auto MatchFuncCall = stmt().bind("stmt");
77-
auto MatchFuncCall = declRefExpr().bind("declRefExpr");
78-
Stmt *CurrentNode = func->getBody();
79-
futag::FutagCatchInfoCallBack statementMatchCallBack{Mgr, func, BeginLine,
80-
EndLine};
81-
llvm::outs() << "-- Begin line: " << statementMatchCallBack.BeginLine << "\n";
82-
llvm::outs() << "-- End line: " << statementMatchCallBack.EndLine << "\n";
83-
84-
Finder.addMatcher(MatchFuncCall, &statementMatchCallBack);
85-
Finder.futagMatchAST(Mgr.getASTContext(), CurrentNode);
76+
// auto MatchFuncCall = stmt().bind("stmt");
77+
auto MatchFuncCall = declRefExpr().bind("declRefExpr");
78+
Stmt *CurrentNode = func->getBody();
79+
futag::FutagCatchInfoCallBack statementMatchCallBack{Mgr, func, BeginLine,
80+
EndLine};
81+
llvm::outs() << "-- Begin line: " << statementMatchCallBack.BeginLine
82+
<< "\n";
83+
llvm::outs() << "-- End line: " << statementMatchCallBack.EndLine << "\n";
8684

85+
Finder.addMatcher(MatchFuncCall, &statementMatchCallBack);
86+
Finder.futagMatchAST(Mgr.getASTContext(), CurrentNode);
8787
}
8888

8989
void ento::registerFutagCatchInfo(CheckerManager &Mgr) {
90-
auto *Chk = Mgr.registerChecker<FutagCatchInfo>();
91-
Chk->FuncName = std::string(Mgr.getAnalyzerOptions().getCheckerStringOption(
92-
Mgr.getCurrentCheckerName(), "FuncName"));
93-
Chk->BeginLine = Mgr.getAnalyzerOptions().getCheckerIntegerOption(
94-
Mgr.getCurrentCheckerName(), "BeginLine");
95-
Chk->EndLine = Mgr.getAnalyzerOptions().getCheckerIntegerOption(
96-
Mgr.getCurrentCheckerName(), "EndLine");
90+
auto *Chk = Mgr.registerChecker<FutagCatchInfo>();
91+
Chk->FuncName = std::string(Mgr.getAnalyzerOptions().getCheckerStringOption(
92+
Mgr.getCurrentCheckerName(), "FuncName"));
93+
Chk->BeginLine = Mgr.getAnalyzerOptions().getCheckerIntegerOption(
94+
Mgr.getCurrentCheckerName(), "BeginLine");
95+
Chk->EndLine = Mgr.getAnalyzerOptions().getCheckerIntegerOption(
96+
Mgr.getCurrentCheckerName(), "EndLine");
9797
}
9898

9999
bool ento::shouldRegisterFutagCatchInfo(const CheckerManager &mgr) {
100-
return true;
100+
return true;
101101
}

0 commit comments

Comments
 (0)