Frama-C/JESSIS 사용법 소개

Similar documents
11장 포인터

Chapter #01 Subject

chap 5: Trees

Microsoft PowerPoint - chap10-함수의활용.pptx

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

Chapter 4. LISTS

Microsoft PowerPoint - chap11-포인터의활용.pptx

Microsoft PowerPoint - chap06-2pointer.ppt

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

슬라이드 1

Microsoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600

신림프로그래머_클린코드.key

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2


11장 포인터

PowerPoint 프레젠테이션

금오공대 컴퓨터공학전공 강의자료

2002년 2학기 자료구조

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

PL10

Lab 3. 실습문제 (Single linked list)_해답.hwp

5.스택(강의자료).key

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp

설계란 무엇인가?

슬라이드 1

K&R2 Reference Manual 번역본

#편집인협회보381호_0422

: 1 int arr[9]; int n, i; printf(" : "); scanf("%d", &n); : : for(i=1; i<10; i++) arr[i-1] = n * i; for(i=0; i<9; i++) if(i%2 == 1) print

C# Programming Guide - Types

Chapter 4. LISTS

UI TASK & KEY EVENT

Microsoft PowerPoint - 자료구조2008Chap06

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

Visual Basic 반복문

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

adfasdfasfdasfasfadf

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CC0E7B0EDB0FCB8AE5C53746F636B5F4D616E D656E74732E637070>

Chap 6: Graphs

chap01_time_complexity.key

03장.스택.key

Chap 6: Graphs

03_queue

1장. 유닉스 시스템 프로그래밍 개요

원형연결리스트에대한설명중틀린것은 모든노드들이연결되어있다 마지막에삽입하기가간단한다 헤더노드를가질수있다 최종노드포인터가 NULL이다 리스트의 번째요소를가장빠르게찾을수있는구현방법은무엇인가 배열 단순연결리스트 원형연결리스트 이중연결리스트 단순연결리스트의노드포인터 가마지막노드를

untitled

untitled

Microsoft PowerPoint - chap06-5 [호환 모드]

PowerPoint 프레젠테이션

Chapter 4. LISTS

PowerPoint 프레젠테이션

Data structure: Assignment 1 Seung-Hoon Na October 1, Assignment 1 Binary search 주어진 정렬된 입력 파일이 있다고 가정하자. 단, 파일내의 숫자는 공백으로 구 분, file내에 숫자들은

리스트 (list), 선형리스트 (linear list): 순서를가진항목들의모임 집합 : 항목간의순서의개념이없음 L = n ( item0, item1,..., item -1) l 리스트의예 l 요일 : ( 일요일, 월요일,, 토요일 ) l 한글자음의모임 : ( ㄱ, ㄴ

1장. 리스트

PowerPoint 프레젠테이션

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

06장.리스트

02장.배열과 클래스

Microsoft PowerPoint - ch07 - 포인터 pm0415

슬라이드 1

7장

Let G = (V, E) be a connected, undirected graph with a real-valued weight function w defined on E. Let A be a set of E, possibly empty, that is includ

UI TASK & KEY EVENT

금오공대 컴퓨터공학전공 강의자료

Chap 6: Graphs

윤성우의 열혈 TCP/IP 소켓 프로그래밍

11강-힙정렬.ppt

구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined data types) : 다양한자료형을묶어서목적에따라새로운자료형을

Microsoft Word - FunctionCall

(Microsoft Word - \301\337\260\243\260\355\273\347.docx)

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

중간고사 (자료 구조)

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>

Microsoft PowerPoint - chap03-변수와데이터형.pptx

Microsoft PowerPoint - chap12-고급기능.pptx


Line (A) å j a k= i k #define max(a, b) (((a) >= (b))? (a) : (b)) long MaxSubseqSum0(int A[], unsigned Left, unsigned Right) { int Center, i; long Max

Microsoft PowerPoint - Chapter_09.pptx

C 언어 프로그래밊 과제 풀이

01_List

<4D F736F F F696E74202D FBFACB0E120C0DAB7E1B1B8C1B6205BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - chap04-연산자.pptx

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

Microsoft PowerPoint - chap06-1Array.ppt

Microsoft PowerPoint - 8ÀÏ°_Æ÷ÀÎÅÍ.ppt

PowerPoint Template

KNK_C_05_Pointers_Arrays_structures_summary_v02

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

C프로-3장c03逞풚

Microsoft PowerPoint - chap05-제어문.pptx

Microsoft PowerPoint - additional01.ppt [호환 모드]

Visual C++ & OOP Fundamentals ( 2005/1/31~2005/2/4)

3. 1 포인터란 3. 2 포인터변수의선언과사용 3. 3 다차원포인터변수의선언과사용 3. 4 주소의가감산 3. 5 함수포인터

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

버퍼오버플로우-왕기초편 10. 메모리를 Hex dump 뜨기 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습

Transcription:

Frama-C 프로그램검증시스템소개 박종현 @ POSTECH PL

Frama-C? C 프로그램대상정적분석도구 플러그인구조 JESSIE Wp Aorai Frama-C 커널 2 ROSAEC 2011 동계워크샵 @ 통영

JESSIE? Frama-C 연역검증플러그인 프로그램분석 검증조건추출 증명 Hoare 논리에기초한프로그램검증도구 사용법 $ frama-c jessie < 검증대상 C 파일 > 특징 다양한자동정리증명기및증명보조기지원 함수단위로안전성검증및기능검증수행 3 ROSAEC 2011 동계워크샵 @ 통영

안전성검증? 프로그램이안전하게동작하는가? 4 ROSAEC 2011 동계워크샵 @ 통영

안전성검증? 프로그램이안전하게동작하는가? 32비트정수표현범위안에서만계산? 할당된메모리영역만참조? 프로그램이유한시갂안에종료? 예제 int mean(int p, int q) { return (p + q) / 2; int mean(int p, int q) { return p / 2 + q / 2 + (p % 2 + q % 2) / 2; 5 ROSAEC 2011 동계워크샵 @ 통영

기능검증? 프로그램이의도한기능을수행하는가? sort 함수가주어진입력을실제로정렬하는가? 각프로그램마다의도하는기능이다름 void mean(int* p, int* q) ; void sort(int* arr, int len); 사용자가의도하는기능에대한정보필요 6 ROSAEC 2011 동계워크샵 @ 통영

명세? 프로그램이의도하는기능에대한논리적기술 /*@ 명세 */ int mean(int* p, int* q) { 종류? requires ensures assigns 7 ROSAEC 2011 동계워크샵 @ 통영

requires & ensures requires P 함수가호출될때만족해야하는조건 \valid ensures P 함수가종료된후만족되어야하는조건 \result 예제 /*@ requires \valid(p) && \valid(q) ensures \result == (*p + *q) / 2; */ int mean(int* p, int* q) { return *p / 2 + *q / 2 + (*p % 2 + *q % 2) / 2; 8 ROSAEC 2011 동계워크샵 @ 통영

requires & ensures ensures 는함수가종료된후상태를기술 /*@ requires \valid(p) && \valid(q); ensures \result == (*p + *q) / 2; */ int mean(int* p, int* q) { *p = 0; *q = 0; return 0; \old /*@ requires \valid(p) && \valid(q); ensures \result == (\old(*p) + \old (*q)) / 2; */ int mean(int p, int q) { *p = 0; *q = 0; return 0; 9 ROSAEC 2011 동계워크샵 @ 통영

requires & ensures ensures 는함수가종료된후상태만을기술 예제 /*@ requires \valid(p) && \valid(q); ensures \result == (\old(*p) + \old(*q)) / 2; */ int mean(int* p, int* q) { int i = 0; while( i >= 0 ); return 0; 10 ROSAEC 2011 동계워크샵 @ 통영

requires 와 ensures 만으로도충분하다! 11 ROSAEC 2011 동계워크샵 @ 통영

assigns 하지만 int M; /*@ requires \valid(p) && \valid(q); ensures \result == (\old(*p) + \old (*q)) / 2; */ int mean(int* p, int* q) { M = 0; return *p / 2 + *q / 2 + (*p % 2 + *q % 2) / 2; assigns L 함수가종료된후변경될수있는외부메모리영역한정기술되지않은메모리영역은변경되지않음 \nothing 12 ROSAEC 2011 동계워크샵 @ 통영

assigns 하지만 int M; /*@ requires \valid(p) && \valid(q); ensures \result == (\old(*p) + \old (*q)) / 2; assigns \nothing; */ int mean(int* p, int* q) { M = 0; return *p / 2 + *q / 2 + (*p % 2 + *q % 2) / 2; assigns L 함수가종료된후변경될수있는외부메모리영역한정기술되지않은메모리영역은변경되지않음 \nothing 13 ROSAEC 2011 동계워크샵 @ 통영

시연! /*@ requires \valid(p) && \valid(q); ensures \valid == (\old(*p) + \old(*q)) / 2; assigns \nothing; */ int mean(int* p, int* q) { return *p / 2 + *q / 2 + (*p % 2 + *q % 2) / 2; 14 ROSAEC 2011 동계워크샵 @ 통영

반복문!? /*@ requires len >= 1 && \valid_range(arr, 0, len 1); ensures 0 <= \result < len; ensures \forall int i; 0 <= i < len ==> arr[i] <= arr[\result]; assigns \nothing; */ int find_max(int* arr, int len) { int idx = 0; for(int i = 1; i < len; i++) if( arr[i] > arr[idx] ) idx = i; return idx; 15 ROSAEC 2011 동계워크샵 @ 통영

loop variant & loop invariant loop variant e 반복문실행시값이줄어드는정수계산식 loop invariant P 반복문시작점에서항상만족되는조건 16 ROSAEC 2011 동계워크샵 @ 통영

시연! /*@ requires len >= 1 && \valid_range(arr, 0, len 1); ensures 0 <= \result < len; ensures \forall int i; 0 <= i < len ==> arr[i] <= arr[\result]; assigns \nothing; */ int find_max(int* arr, int len) { int idx = 0; idx i len-1 /*@ loop variant len i; loop invariant 0 <= i <= len; loop invariant 0 <= idx < i; loop invariant \forall int n; 0 <= n < i ==> arr[n] <= arr[idx]; */ for(int i = 1; i < len; i++) if( arr[i] > arr[idx] ) idx = i; return idx; 17 ROSAEC 2011 동계워크샵 @ 통영

포인터!? typedef struct _list { int element; struct _list *next; list; /*@ requires \valid(root) &&???; ensures???; assigns \nothing; */ list *find_max(list *root) { list *ptr = root; while(root->next) { root = root->next; if( root->element > ptr->element ) ptr = root; return ptr; 18 ROSAEC 2011 동계워크샵 @ 통영

inductive & predicate inductive & predicate 대상에대한논리적성질정의 예제 /*@ inductive reachable{l(list *root, list *node) { case reachable_root {L: \forall list* root; reachable(root, root); case reachable_next {L: \forall list* root, *node; \valid(root) ==> reachable(root->next, node) ==> reachable(root, node); */ //@ predicate finite_list{l(list *l) = reachable(l, \null); 19 ROSAEC 2011 동계워크샵 @ 통영

inductive & predicate 예제 ( 계속 ) /*@ predicate connected_list{l(list *root) = \forall list *node; reachable(root, node) ==> node == \null (\valid(node->next) && reachable(root, node->next)); */ //@ predicate linked_list{l(list *l) = finite_list(l) && connected_list(l); 20 ROSAEC 2011 동계워크샵 @ 통영

명세 /*@ requires \valid(root) && linked_list(root); ensures \valid(\result) && reachable(root, \result); ensures \forall list *node; \valid(node) ==> reachable(root, node) ==> assigns \nothing; */ list *find_max(list *root) { node->element <= \result->element; /*@ requires len >= 1 && \valid_range(arr, 0, len 1); ensures 0 <= \result < len; ensures \forall int i; 0 <= i < len ==> arr[i] <= arr[\result]; assigns \nothing; */ 21 ROSAEC 2011 동계워크샵 @ 통영

명세 ( 계속 ) list *ptr = root; loop variant??? /*@ loop invariant \valid(root) && \valid(ptr); loop invariant reachable(\at(root, Pre), root); loop invariant reachable(\at(root, Pre), ptr); loop invariant \forall list *node; \valid(node) ==> reachable(\at(root, Pre), node) &&!reachable(root->next, node) ==> node->element <= ptr->element; */ while(root->next) { /*@ loop variant len i; root = root->next; loop invariant 0 <= i <= len; if( root->element loop > invariant ptr->element 0 <= idx ) ptr < = i; root; loop invariant \forall int n; 0 <= n < i ==> arr[n] <= arr[idx]; */ return ptr; 22 ROSAEC 2011 동계워크샵 @ 통영

logic logic 입력에따라결과를반환하는논리함수정의 프로그램상의값을이용해야할경우? 예제 선언적정의를이용해서함수정의 /*@ axiomatic Length { logic integer length{l(list *root); axiom length_nil{l : length(\null) == 0; axiom length_cons(l : \forall list *l; \valid(l) ==> length(l) == length(l->next) + 1; */ /*@ predicate finite_list{l(list *l) = reachable(l, \null) && \forall list *node; reachable(l, node) ==> length(node) >= 0; */ 23 ROSAEC 2011 동계워크샵 @ 통영

명세 ( 계속 ) list *ptr = root; /*@ loop variant length(root); loop invariant \valid(root) && \valid(ptr); loop invariant reachable(\at(root, Pre), ptr); loop invariant reachable(\at(root, Pre), root); loop invariant \forall list *node; \valid(node) ==> reachable(\at(root, Pre), node) &&!reachable(root->next, node) ==> node->element <= ptr->element; */ while(root->next) { root = root->next; if( root->element > ptr->element ) ptr = root; return ptr; 24 ROSAEC 2011 동계워크샵 @ 통영

시연! 25 ROSAEC 2011 동계워크샵 @ 통영

감사합니다! 26 ROSAEC 2011 동계워크샵 @ 통영

27 ROSAEC 2011 동계워크샵 @ 통영