DBPIA-NURIMEDIA

Size: px
Start display at page:

Download "DBPIA-NURIMEDIA"

Transcription

1 情報保護學會誌第 16 卷第 5 號, 버퍼오버플로우검출을위한정적분석도구의현황과전망 김유일 *, 한환수 ** 요 약 버퍼오버플로우는 C 언어로작성한소프트웨어에보안취약점을남기는대표적인원인이다. 프로그램정적분석기법을통해버퍼오버플로우취약점을검출하는방법은버퍼오버플로우취약점을활용한다양한보안공격에대한근본적인해결책이될수있다. 본고에서는버퍼오버플로우취약점을검출할수있는몇가지정적분석도구들의특징과성능을살펴보고, 보다효율적이고정확한버퍼오버플로우정적분석도구를개발하기위한우리의연구성과를소개한다. Ⅰ. 서론버퍼오버플로우 (buffer overflow) 는프로그램이배열이나동적으로할당한메모리영역의경계를넘어데이터를읽거나쓰는상황을말한다. 버퍼의경계를지나데이터를기록하면다른변수의값에영향을미치거나프로그램의제어흐름을바꿀수있는데, 이는종종소프트웨어의심각한보안취약점으로남는다. 특히 C 언어로프로그램을작성하는경우에는버퍼의경계를검사하는코드를작성하는일이프로그래머의책임이므로프로그래머의실수로버퍼오버플로우취약점이나타나기쉽다. 버퍼오버플로우는 C 언어로작성된소프트웨어가보안에취약하게만드는대표적인원인이고, 알려진보안취약점의상당수가버퍼오버플로우와관련되어있다. 예를들어, 1998년의 Morris 웜은유닉스 fingerd 소프트웨어의버퍼오버플로우취약점을이용한것이었고, 2001년의 Code Red 바이러스는마이크로소프트윈도우의 IIS 소프트웨어의버퍼오버플로우취약점을이용한것이었다. D. Wagner 등의연구를인용하면 1988년부터 1998년까지 CERT Advisories 를통해발표된보안취약점의 50% 정도가버퍼오버플로우와관련된것이었고, 최근으로갈수록그비율이증가하는추세를보이고있다 5. 프로그램정적분석은프로그램수행중에발생하는 일을프로그램을실행하지않고파악하기위한체계적인방법이다. 정적분석도구가동적분석도구에비해우수한점을세가지로요약할수있다. 첫째, 정적분석도구는사용하기쉽다. 동적분석도구를이용하기위해서는대상프로그램을실행할수있는환경을만들고적절한입력데이터를제공해주어야하지만, 정적분석도구를사용하는경우에는대상프로그램의소스코드만있으면된다. 소스코드의일부만주어지더라도정적분석은가능하다. 둘째, 정적분석도구는프로그램의모든실행가능한경로를살펴볼수있다. 동적분석도구를사용한검사는프로그램테스트와유사하게존재하는취약점을발견하지못할가능성이있다. 셋째, 정적분석도구는대상프로그램의성능에영향을미치지않는다. 동적분석기법은실행중에오류검사를수행하도록대상프로그램을변형하는방법이므로대상프로그램의성능을현저하게저하시킬가능성이있다. 이처럼정적분석도구가다수의장점을가지고있으므로, 지금까지정적분석기법을통해 C 언어로작성한소프트웨어의버퍼오버플로우취약점을검출하기위한연구가활발하게수행되었다. 본고에서는지금까지개발된버퍼오버플로우정적분석도구들의성능과한계에대해살펴보고, 보다효율적이고정확한정적분석도구를개발하기위한연구방향을제안하려고한다. * KAIST 전자전산학과전산학전공 (youil.kim@arcs.kaist.ac.kr) ** KAIST 전자전산학과전산학전공 (hshan@cs.kaist.ac.kr)

2 46 버퍼오버플로우검출을위한정적분석도구의현황과전망 본문의전체적인구성은다음과같다. 2 장에서는버퍼오버플로우취약점과이를이용한공격방법에대해자세히살펴본다. 3 장에서는버퍼오버플로우취약점을검출하는정적분석도구를개발하기위한기반지식을설명한다. 4 장에서는지금까지개발된정적분석도구들을살펴본다. 5 장에서는더나은정적분석도구를개발하기위한우리의연구성과와향후계획을소개하고, 6 장에서결론을맺는다. Ⅱ. 버퍼오버플로우공격의실제이장에서는버퍼오버플로우취약점이있는예제프로그램들을사용하여버퍼오버플로우취약점을이용한공격이어떤원리로이루어지는지살펴본다. 여기서소개하는공격방법은지금까지개발된공격방법중일부에지나지않는다. 점차발전하는공격방법을차례로소개하면서, 버퍼오버플로우를근본적으로방지하지않는해결책은공격을어렵게만들지라도잠재적인보안취약점을완전히해결하는것이아니라는사실을강조하고싶다. [ 그림 1] 의예제프로그램은 1996년 Aleph One 이스택스매싱 (Stack Smashing) 이라는공격기법을소개하면서사용한것이다 2. argv[1] 에저장된문자열의길이가배열 buf의크기를넘을수있으므로, 프로그램의다섯째줄에서버퍼오버플로우가발생할수있다. 이프로그램에서버퍼오버플로우가특히문제가되는이유는기존의시스템에서는이러한유형의프로그램에버퍼오버플로우를발생시켜임의의코드를수행시킬수있었기때문이다. 대상프로그램이관리자권한으로수행되는경우라면, 악의적인사용자가관리자권한으로임의의작업을수행할수있다. 스택에할당한버퍼에데이터를기록하면서버퍼오버플로우를발생시켜스택에저장되어있는함수의리턴주소 (return address) 를변경하는것이스택스 1: int main(int argc, char **argv) 3: char buf[512]; 4: if (argc > 1) 5: strcpy(buf, argv[1]); 6: return 0; 7: } [ 그림 1] 스택스매싱취약점이있는프로그램 매싱공격의핵심이다. 이러한변경이가능한이유는스택에할당한버퍼에는주소가증가하는방향으로값을기록하는반면, 스택프레임은주소가감소하는방향으로쌓아나가기때문이다. 버퍼의경계를넘어서악의적인코드로스택을덮어쓰고현재수행중인함수의리턴주소를변경하면, 함수가작업을마치고호출지점으로돌아가는대신삽입한코드를수행하도록할수있다. 지금까지스택스매싱공격을방지하기위한다양한해결방안이제안되었다 1. 프로그램을실행할때마다스택의구조가무작위로결정되도록하는방법, 함수의지역변수와리턴주소사이에비밀값을삽입해두었다가이값이바뀌었는지의여부로버퍼오버플로우발생여부를판단하는방법, 함수의리턴주소를별도의자료구조에저장하는방법, 스택에저장한코드는실행할수없도록하는방법등이있다. 제안된방법들은스택스매싱공격을어렵게만들지만, 버퍼오버플로우를근본적으로방지하는방법은아니다. 따라서이러한방법들을무력화시키는개선된공격방법들도계속발표되고있다 4. [ 그림 2] 의예제프로그램은함수의리턴주소를변경하지못하는상황에서도임의의코드를수행하는버퍼오버플로우공격이가능하다는것을보여주는예이다. 배열 buf에대해버퍼오버플로우를발생시켜함수포인터 pf의값을바꿀수있다. 스택스매싱공격과비슷하게배열 buf에수행하려는코드를저장하고버퍼오버플로우를통해함수포인터 pf가버퍼에저장한코드의시작주소를가리키도록하면, 이후에함수포인터 pf를통한함수호출이발생할때프로그래머가의도한함수가호출되는대신버퍼에삽입한코드가수행된다. 이러한유형의공격은함수의리턴주소만을보호하기위해제안된기존의많은해결책들을우회할수있다. 1: int main(int argc, char **argv) 3: char buf[512]; 4: void (*pf)() = f; 5: strcpy(buf, argv[1]); 6: pf(); 7: return 0; 8: } [ 그림 2] 포인터변조취약점이있는프로그램

3 情報保護學會誌 ( ) 47 이러한유형의공격방법은버퍼오버플로우취약점을활용하여얼마나다양한공격이가능한지를잘보여준다. 버퍼오버플로우를통해변경되는변수가함수포인터가아닌경우에도보안취약점이발생할수있다. 만일포인터변수의값과포인터변수에저장될값을한꺼번에변경할수있다면임의의메모리주소에 4 바이트데이터를기록할수있는데, 이는다양한공격을허용하는보안취약점이된다. [ 그림 3] 의예제프로그램은 M. Kaempf가힙오버플로우를활용한언링크 (unlink) 기술이라는공격기법을소개하면서사용한예제이다 3. 이프로그램은버퍼를스택이아닌힙에할당하고있다. 힙에할당한버퍼는버퍼오버플로우가발생하더라도함수의리턴주소가변경되거나지역변수의값이변경되지않으므로, 지금까지설명한공격방법으로부터는안전하다고말할수있다. 그러나버퍼오버플로우가발생할수있다는것은여전히잠재위험으로남는다. 실제로 [ 그림 3] 의프로그램을 GNU C 라이브러리 이전버전이설치된리눅스시스템에서컴파일하여실행하는경우에버퍼오버플로우를활용한공격이가능하다. GNU C 라이브러리의동적메모리관리함수들은 Doug Lea의동적메모리관리함수구현에기반을두고있는데, Doug Lea의초기구현은언링크기술이라고불리는공격기법에취약하다는것이알려져있다 3. 라이브러리는 free 함수를통해해제된메모리영역들을환형이중연결리스트로관리하는데, unlink는환형이중연결리스트에서하나의항목을제거하는매크로함수의이름이다. 언링크기술의원리를간단히설명하면다음과같다. [ 그림 3] 의 malloc 함수를통해버퍼를할당하면정확히지정한만큼의공간이할당되는것이아니고버퍼의경계에 malloc 관련함수들이사용하는약간 의정보가추가되는데, 그중에는버퍼가해제되었는지의여부를나타내는비트도포함된다. [ 그림 3] 의프로그램과같이연속적으로두개의버퍼를할당한경우는이비트를조작하여여섯째줄의첫번째 free 함수호출에서 unlink 매크로가수행되도록할수있다. 버퍼가해제되면사용자데이터를저장하던공간은환형이중연결리스트를구성하는포인터를저장하는공간으로재활용되는데, 이곳에저장되는데이터를조작하면 unlink 매크로가임의의메모리주소에 4 바이트데이터를기록하도록할수있다. 임의의주소에 4 바이트데이터를기록하는것을활용한대표적인공격방법은 GOT(Global Offset Table) 을변경하는것이다. 프로그램이사용하는공유라이브러리함수가적재된위치는 GOT에기록되어있고, 프로그램은공유라이브러리를호출할때 GOT 항목을참조하여공유라이브러리함수의시작주소로분기한다. [ 그림 3] 의프로그램에서여섯째줄의 free 함수를수행할때 free 함수의시작주소를저장하고있는 GOT 항목을버퍼에삽입한코드의시작주소로변경한다면, 일곱째줄에서는 free 함수가호출되는대신버퍼에삽입한코드가수행된다. 이처럼다양한버퍼오버플로우공격에효과적으로대응하기위해서는버퍼오버플로우자체를근본적으로방지하는해결책이필요하다. 최근버전의 GNU C 라이브러리는소스코드가수정되어더이상언링크기술을통한공격은가능하지않지만, 향후계속하여지금까지알려지지않은새로운공격방법이발견되고개발될것이다. 따라서프로그램에버퍼오버플로우가능성이남아있는한잠재적인보안위험이완전히사라진것은아니다. Ⅲ. 버퍼오버플로우검출을위한정적분석 1: int main(int argc, char **argv) 3: char *first = malloc(666); 4: char *second = malloc(12); 5: strcpy(first, argv[1]); 6: free(first); 7: free(second); 8: return 0; 9: } [ 그림 3] 힙오버플로우취약점이있는프로그램 정적분석기법은모든버퍼오버플로우취약점을검출하는효과적인해결책이될수있다. 이장에서는정적분석에대한기반지식을설명하고, 버퍼오버플로우취약점을검출하기위한정적분석도구를설계할때에고려할사항들을살펴본다. 이장에서설명하는내용들은지금까지개발된정적분석도구들의특성을이해하고더나은도구를개발하기위한기반이될것이다. 우리의목표는모든버퍼오버플로우가능성을검출하는안전한정적분석도구를개발하는것이다. 이장의내용은이러한목표를기준으로하여설명하는것

4 48 버퍼오버플로우검출을위한정적분석도구의현황과전망 으로, 이장의예제프로그램들은 3 장의예제프로그램들에비해다소복잡하고의도적인면이있다. 1. 정수변수분석모든버퍼오버플로우검출을위한정적분석은정수변수의값이나버퍼의크기, 문자열의길이등을분석할수있어야한다. 프로그램실행중에각정수변수에저장되는모든값을계산하는것은거의불가능하고또한불필요한작업이다. 정적분석을설계할때에는정수변수가실행중에가지는값에대한정보를효과적으로표현하기위한방법을선택해야한다. 정수변수의값을분석하기위한가장간단한방법으로구간 (Interval) 도메인 16 을사용한분석을들수있다. 구간도메인을사용하여분석하면정수변수가실행중에가지는값의최소값과최대값을알수있다. 버퍼오버플로우를검출하는데에는구간도메인이효과적으로사용될수있는데, 대체적으로최소값과최대값이버퍼오버플로우여부를판단하는데중요한역할을하기때문이다. [ 그림 4] 의예제프로그램은구간도메인을사용한분석으로충분한정보를얻지못하는예이다. 구간도메인을사용한분석은분석속도를향상시키기위한축지법 (widening) 및좁히기 (narrowing) 기법과함께사용된다. [ 그림 4] 의프로그램을이러한방법으로분석하면반복문안에서변수 i의최대값이 9라는정보를얻을수있지만변수 j의최대값은분석하지못한다. 지금까지제안된방법중에서가장정확도가높은값분석방법은다각형 (Polyhedra) 도메인 17 을이용한분석방법이다. 다각형도메인을이용한분석은정수변수들사이의모든선형관계식을이끌어낸다. 예를들어 [ 그림 4] 의프로그램을다각형도메인을이 1: void figure4(void) 3: char buf[10]; 4: int i, j = 0; 5: for (i = 0; i < 10; i++) { 6: buf[j] = 0; 7: j++; 8: } 9: } [ 그림 4] 변수사이의관계가중요한예 용하여분석하면반복문안에서변수 i와변수 j가항상동일한값을가진다는정보를함께얻게된다. 이정보와변수 i의최대값이 9라는정보를종합하면변수 j의최대값도 9라는것을알수있다. 그러나다각형도메인은복잡도가지나치게높아큰프로그램에적용하기어렵다는단점이있다. A. Mine는구간도메인과다각형도메인사이의정확도및복잡도를가지는분석방법들을제안했는데 18, [ 그림 4] 의프로그램은 A. Mine가제안한분석방법으로도충분한분석결과를얻을수있다. 2. 포인터분석 C 언어로작성한프로그램을정확하게분석하기위해서는포인터연산을정확하게다루는것이필수적이다. C 언어로작성한프로그램은포인터변수를정수변수나함수의별명 (alias) 으로사용하기도하고, 포인터를통해버퍼에접근하기도한다. 포인터분석은각포인터변수가가리키는대상의집합을구하는문제인데, 정확하게분석하려면계산의시간복잡도가 O(n 3 ) 에달한다. B. Steensgaard 는기존의포인터분석방법으로소스코드가 10 만줄이상인대규모소프트웨어를한꺼번에분석하기는어렵다는것을지적하면서, 정확도가다소떨어지지만거의선형시간복잡도를보이는포인터분석방법을제안하였다 15. 버퍼오버플로우검출을위해서는포인터가버퍼를가리키는경우버퍼의크기와오프셋까지분석해야한다. [ 그림 5] 의프로그램은정확한포인터분석이필요한대상프로그램의예이다. 포인터변수 p 가크기가 10 인배열 buf 의다섯째항목을가리킨다는것과포인터변수 q 가정수변수 i 를가리킨다는것을파악해야이프로그램이버퍼오버플로우를발생시키는원인을올바르게분석할수있다. 1: void figure5(void) 3: char buf[10], *p; 4: int i, *q = &i; 5: p = &buf[5]; 6: i = 5; 7: p[*q] = 0; 8: } [ 그림 5] 포인터분석이중요한예

5 情報保護學會誌 ( ) 제어흐름을고려하는분석 4. 함수호출문맥을고려하는분석 제어흐름을고려하는 (flow-sensitive) 분석기법은프로그램의제어흐름이도달하는각지점에대해분석정보를구분하여유지한다. 예를들어, [ 그림 6] 의프로그램을제어흐름을고려하는분석기법으로분석하면, 변수 i가여섯째줄에서는 0과 9 사이의값을가지고일곱째줄에서는 10이된다는비교적자세한분석결과를얻을수있다. 제어흐름을무시하는 (flow-insensitive) 분석기법은프로그램에대한전체적인사실을빠르게파악하기위해서사용된다. [ 그림 6] 의프로그램을제어흐름을분석기법으로분석하면, 프로그램수행중에변수 i가 0과 10 사이의값을가진다는덜자세한분석결과를얻는다. 결과적으로 [ 그림 6] 의프로그램에대해제어흐름을고려하는분석기법을사용하면일곱째줄에서버퍼오버플로우가발생한다는것을정확하게알수있지만, 제어흐름을무시하는분석기법을사용하면여섯째줄에대해서도버퍼오버플로우가발생한다는잘못된오류메시지를출력하게된다. 제어흐름을무시하는분석은이처럼부정확한분석결과를제공하지만, 반면효율적으로수행할수있는여지가많다. 실제로 B. Steensgaard가제안한포인터분석기법은제어흐름을무시하는분석기법에속한다. B. Steensgaard의포인터분석이유용한이유는대부분의포인터변수가단순한형태로사용되는프로그램에서는제어흐름을무시하는분석기법을사용해도정확도를크게잃지않기때문이다. 예를들어, 프로그램에서변수가단한번나타나거나값이변하지않는다면, 제어흐름을무시하는분석기법을사용해도정확도를잃지않는다. 1: void figure6(void) 3: char buf[10]; 4: int i; 5: for (i = 0; i < 10; i++) 6: buf[i] = '0' + i; 7: buf[i] = '\0'; 8: } [ 그림 6] 제어흐름을고려한분석이중요한예 함수호출문맥을고려하는 (context-sensitive) 분석기법이란하나의함수가서로다른인자를이용해여러번호출되는경우에각호출문맥을구분할수있는분석기법을말한다. [ 그림 7] 의프로그램은여덟째줄의함수호출은버퍼오버플로우를발생시키지않고, 아홉째줄의함수호출은버퍼오버플로우를발생시키는프로그램이다. 함수호출문맥을고려하는분석기법을이용하여이프로그램을분석하면아홉째줄의함수호출이버퍼오버플로우를발생시킨다는것을정확히알수있다. 함수호출문맥을무시하는 (context-insensitive) 분석기법을사용하면여덟째줄과아홉째줄의함수호출을한꺼번에분석하므로여덟째줄의함수호출도버퍼오버플로우를발생시킨다는잘못된경고메시지를출력하게된다. 함수호출문맥을고려하는분석기법도여러가지방법이있다. 일반적으로는함수호출경로가서로다른함수호출을구분하는방법과인자가서로다른함수호출을구분하는방법으로분류할수있다. 실제적으로는프로그램소스코드상에서구분되는함수호출들간에만구분하는방법이간단하기때문에많이사용된다. 이방법은함수호출경로로함수호출을구분하는방법에속한다. 5. 정적분석의안전성 (Soundness) 안전한정적분석기법을사용해야만모든가능한오류를발견한다는정적분석의최대장점을살릴수 1: void figure7(char *src) 3: char buf[5]; 4: strcpy(buf, src); 5: } 6: int main() 7: { 8: figure7("abc"); 9: figure7("abcde"); 10: return 0; 11: } [ 그림 7] 함수호출문맥을고려한분석이중요한예

6 50 버퍼오버플로우검출을위한정적분석도구의현황과전망 있다. 정적분석이안전하다는것은정적분석을통해대상프로그램에버퍼오버플로우취약점이존재하지않는다는결론을얻었다면, 실제로대상프로그램을어떠한방법으로수행하더라도버퍼오버플로우가발생하지않는다는것이보장된다는의미이다. 정적분석을통해프로그램실행중에발생하는일을완전하게파악하는것이불가능하다는것은수학적으로증명된사실이다. 정적분석도구는대상프로그램의실행중에발생하는일을대략적으로파악할수밖에없으며, 그결과로오류를발견하지못하거나오류가아닌부분을오류라고판단하는경우가발생한다. 안전한정적분석도구는오류를놓치지않도록설계된분석기법을사용하므로오류가아닌데도오류라고판단하는경우만발생하는데, 본고에서는이런경우를잘못된경고메시지 (false alarm) 라고부른다. 실제적으로는안전하지않은정적분석기법이많이사용되는두가지이유가있다. 하나는안전한정적분석기법이다수의잘못된경고메시지를출력한다는것이고, 다른하나는안전한정적분석기법을충분히효율적으로수행하기위한연구성과가부족하다는것이다. 6. 종합 : 요약해석 (Abstract Interpretation) 다양한정적분석기법들을살펴보고버퍼오버플로우검출이라는목적에효과적일것으로판단되는기법들을선택하여정적분석을설계한다. 안전한정적분석을체계적으로설계하는좋은방법중하나는요약해석프레임워크 16 에맞추어설계하는것이다. 요약해석프레임워크의요구조건에맞추어설계한정적분석기법은정적분석의올바름이자동으로증명된다는장점이있다. 다음장에서소개할 PolySpace C Verifier 와 Airac 은모두요약해석을기반으로한안전한정적분석도구에속한다. 다만요약해석에기반을두고개발된정적분석도구는아직충분한성능을보여주지못하고있다. 그러나요약해석에기반을둔정적분석도구를실제로구현하면서얻은연구결과가국외학회에종종발표되고있는것으로미루어보면, 최근에는요약해석에기반을둔정적분석도구를효율적으로구현하기위한연구가활발히진행되고있는것으로판단된다. Ⅳ. 정적분석도구현황 인자의길이를검사하지않는 strcpy 등의함수를사용하는것이버퍼오버플로우취약점의원인이된다 는점에착안하여, 구문분석을통해보안에취약한함수의사용여부를검사하는도구들이있다. 이러한유형에속하는분석도구로는 ITS4, FlawFinder, RATS 등이있다. 이러한분석도구들도초보적인단계의정적분석도구라고말할수있지만, 프로그램의의미를고려하지않으므로, 본논문에서다루려는정적분석도구와는거리가있다. M. Zitser 등은이미알려진버퍼오버플로우보안취약점들을단순화한테스트케이스를설계하고, 이를이용해 BOON, Splint, ARCHER, Poly- Space C Verifier 등의정적분석도구들을비교평가하는연구를수행했다 8. 본고에서는이들정적분석도구들의단순한성능비교를넘어각각의정적분석도구가선택한분석기법을자세히살펴보고, 각분석기법이가지는장점과더불어근본적인한계점에대해생각해보려고한다. 1. BOON 5 BOON 은체계적인프로그램정적분석기법을활용하여버퍼오버플로우취약점을분석하려고시도한최초의정적분석도구라고할수있다. 프로그램정적분석기법을사용함으로써단순히 strcpy 함수가사용된것을문제삼지않고, 실제로대상버퍼의크기가복사하려는문자열의길이보다작은경우만을지적할수있다. BOON 은라이브러리함수에의해발생하는버퍼오버플로우취약점을보다정확하게검출하려는시도인것으로생각된다. 구간도메인을사용하여버퍼의크기나문자열의길이등정수값을분석하고, 포인터의사용은무시한다. 제어흐름및함수호출문맥을무시하는분석기법을이용하여분석의효율을높이려고시도했다. BOON 은 FlawFinder 류의분석도구에비해우수하지만, 정적분석도구로서는초보적인수준이다. 특히포인터를분석하지않는다는점에서존재하는취약점을놓칠가능성이높다. 논문의실험결과에따르면펜티엄 3 PC 를사용하여소스코드가 3 만줄정도인 Sendmail 버전을 15 분안에분석할수있었다. 분석결과로 44 개의경고메시지가출력되었는데, 경고메시지를분석하여새로운버퍼오버플로우오류를발견할수있었다고발표했다. 2. Splint 6 Splint 는가벼운 (light-weight) 정적분석이라고

7 情報保護學會誌 ( ) 51 부르는정적분석기법을사용하여버퍼오버플로우취약점을검출하려고시도한것이다. 프로그램의의미를이해하고제약식을이끌어내기도하지만, 기본적으로는사용자가특별한형식의주석 (annotation) 을작성하여많은정보를제공해줄것을전제로하여개발된분석도구이다. Splint와같이특별한주석을요구하는정적분석도구들은정적분석에지식이없는사용자가사용하기는어렵다는단점이있다. 물론주석을작성하지않아도기본적인분석을수행할수있지만, 다수의잘못된경고메시지가출력되므로분석결과가유용하다고말하기어렵다. Splint는안전하지않은분석기법을사용한다. 충분한주석을작성하여대상프로그램에버퍼오버플로우취약점이없다는분석결과를얻었다하더라도실행중에버퍼오버플로우가발생하지않는다는것을보장하지못한다. Splint를사용하여 [ 그림 7] 의프로그램을분석하면넷째줄에서버퍼오버플로우가발생할수있다는경고메시지를출력한다. Splint는내부적으로 strcpy 함수를안전하게호출하기위해만족시켜야하는제약식을알고있는데, 버퍼 buf의크기가문자열 src의길이보다커야한다는것이다. 이제약식과첫째줄에서얻은버퍼 buf의크기가 5라는정보를결합하여, src의길이가 4 이하여야한다는제약식을이끌어낸다. Splint는주어진프로그램에서문자열 src 의길이가 4 이하라는정보를이끌어낼수없기에경고메시지를출력하는것이다. Splint가출력하는경고메시지는아홉째줄의함수호출과는아무런관련이없다. Splint는각함수를별도로분석하며, 함수호출을분석할때에는사용자가작성한주석에만의존하기때문이다. strcpy와같은라이브러리함수를처리하는것은제작자가미리작성해둔주석에의한것이다. 실제로아홉째줄의함수호출이없어도동일한경고메시지가출력되는데, 함수의인자가길이 4 이하의문자열이어야한다는주석을작성하면보다정확한분석을수행할수있다. 3. ARCHER 7 하게찾아내는것에중점을두어개발된도구라고판단된다. M. Zitser 등의실험에서 ARCHER는 BOON, Splint, PolySpace C Verifier와비교할때오류를발견하지못하는경우가가장많은것으로나타났다 8. ARCHER를통해 [ 그림 7] 의프로그램을분석하면아홉째줄의함수호출이문제가된다는것을정확하게지적할수있다. ARCHER의분석방식은함수 figure7을분석하여인자문자열 src의길이가 5 이상인경우버퍼오버플로우가발생한다는조건을이끌어내고, 함수 figure7을호출할때마다버퍼오버플로우발생조건을만족하는지확인하는방식이다. ARCHER는분석속도와잘못된경고메시지의비율면에서매우우수한성능을보여주고있다. 소스코드의크기가 160만줄에달하는리눅스 버전을 Xeon 2.8 GHz CPU와 512 MB RAM을탑재한시스템에서 4시간정도에분석하여 118개의실제오류를찾았는데, 잘못된경고메시지는 39개에불과했다는실험결과가발표되었다. 4. Coverity 11 미국의 Coverity 사는프랑스의 PolySpace Technologies 사와더불어정적분석기술을상용화시킨대표적인기업이다. Coverity 사의정적분석도구는 Stanford 대학의 D. Engler 등이개발한메타컴파일 (metacompilation) 기법과 xgcc 9 에기반을둔것으로알려져있다. 위에서설명한정적분석도구들과비슷하게안전성을희생하고복잡도가높지않은분석기법을사용하여개발된정적분석도구인데, 상용화된제품이니만큼유사한정적분석도구들중에서는가장성능이우수한것으로보인다. Coverity 사에서공개한보고서에따르면소스코드의크기가 550만줄에달하는리눅스 버전을분석할수있었다. 버퍼오버플로우와관련된경고메시지는총 124개였는데, 이들을분석하여 15개의버퍼오버플로우관련오류를발견했다고발표했다. ARCHER는 Splint와비슷하게복잡도가높지않은분석기법을사용하여유용한정적분석도구를개발하려는시도로볼수있다. 사용자가주석을작성할필요가없다는점과함수호출을자동으로분석한다는점에서 Splint와차별화된다. ARCHER는비교적단순한버퍼오버플로우취약점을가능한빠르고정확 5. PolySpace C Verifier 12 안전한정적분석도구로는프랑스 PolySpace Technologies 사의 PolySpace C Verifier가대표적이다. PolySpace C Verifier는요약해석에기반을둔정적분석기법을사용하여개발한정적분석도

8 52 버퍼오버플로우검출을위한정적분석도구의현황과전망 구로알려져있다. 요약해석에기반을둔안전한정적분석도구들은아직분석속도면에서만족할만한성능을보여주지못하고있다. M. Zitser 등은 PolySpace C Verifier를사용하여소스코드가 15만줄정도인 Sendmail 버전을분석하려고시도했는데, 4 일동안분석을수행해도결과를얻을수없었다고발표했다 8. 속도문제를제외하면 M. Zitser 등의실험에서도 PolySpace C Verifier가가장높은정확도를보여주는정적분석도구로판명되었다. 요약해석에기반을둔안전한정적분석도구가실제로유용하게사용되기위해서분석속도는필수적으로개선되어야할주요문제점이다. 6. Airac5 13 서울대학교의정영범등은요약해석에기반을둔정적분석도구인 Airac을개발했다 10. 최근에는 Airac을더욱개선한버전인 Airac5를개발했고, 실험결과를홈페이지를통해공개하고있다. Airac은버퍼오버플로우취약점검출에특화된정적분석도구라는점에서 PolySpace C Verifier와차별화된다. 통계적인방법으로잘못된경고메시지를걸러내는기법을사용한다는것도특징적이다. 홈페이지를통해공개되어있는실험결과에따르면 3.2 GHz CPU와 4 GB RAM을탑재한펜티엄4 PC를사용하여소스코드의크기가 3만라인정도인 GNU bison 버전을 6 시간이내에분석할수있다. 다섯개의 GNU S/W 실험결과를종합하면 Airac5는소스코드 374줄당 1개의비율로잘못된경고메시지를출력하고있는데, 안전한정적분석도구로서는비교적높은정확도를보여주고있다고판단된다. M. Zitser 등은 PolySpace C Verifier가 12줄당 1개의잘못된경고메시지를출력할것으로추정하였고, Splint가 46줄당 1개의잘못된경고메시지를출력할것으로추정하였다 8. Ⅴ. 우리의연구성과우리는모든버퍼오버플로우취약점을검출할수있는정확하고효율적인정적분석도구를개발하려는목표를가지고있다. 4 장에서살펴보았듯이기존의안전한정적분석도구들은아직만족할만한성능을보여주지못하고있다. 이장에서는우리가개발하고 [ 그림 8] Raccoon의구조있는버퍼오버플로우정적분석도구인 Raccoon을소개하려고한다. [ 그림 8] 과같은구조로정적분석도구를구현함으로써기존의한계를어느정도극복할수있을것으로기대하고있다. 버퍼오버플로우검출을위해분석해야하는정보들을몇가지로분류하고, [ 그림 8] 과같이여러종류의분석을완전히독립된단계로수행하는구조의정적분석도구를설계했다. 정적분석도구를이와같은구조로설계한이유는다음과같은세가지이점을기대하기때문이다. 첫째, 각단계에서서로다른정확도및속도를가진분석기법을사용할수있는유연성이있다. 둘째, 보다정확한결과를위해추가적인정보를분석할필요가있다면새로운단계를추가하는것으로목적을이룰수있다. 셋째, 분석과정에서메모리의최대사용량 (memory peak) 을줄일수있다. 대규모소프트웨어를분석하는경우에는메모리최대사용량이분석도구의성능을좌우하는중요한기준이될수있다. 각단계에서수행되는작업을간단히설명하면다음과같다. 1 단계는구문분석및타입분석단계이다. 대상프로그램을구문분석하고각함수별로제어흐름그래프를생성한다. 2 단계는 Steensgaard 스타일의빠른포인터분석을이용하여함수포인터와정수변수를가리키는포인터를분석한다. 이러한유형의포인터변수들은프로그램전체에서단순하게사용되는경향이있으므로, 정확도를다소희생한분석기법을사용해도전체적으로는정확도를크게잃지않으리라고기대했다. 3 단계는구간도메인을사용한요약해석으로정수변수들의값을분석한다. 3 단계는제어흐름을고려하고, 함수호출문맥을고려하는비교적정확한분석기법을사용한다. 4 단계는독자적으로설계한도메인을사용한요약해석으로버퍼를가리키는포인터들의상세정보를분석한다. 대상버퍼의크기및포인터의오프셋정보를분석하는것이다. 4 단계분석은부분적으로 3 단계분석결과를이용하여진행된다. 5 단계취약점분석단계는 4 단계까지의분석결과를이용하여프로그램의각부분의버퍼오버플로우가능성을진단하

9 情報保護學會誌 ( ) 53 [ 표 1] GNU 소프트웨어를사용한실험결과 소프트웨어 크기 포인터분석 요약해석 경고메시지 tar s s 99 bison s s 109 sed s 8.75s 5 gzip 1.2.4a s 47.51s 323 grep s 76.23s 122 고, 경고메시지를출력한다. Raccoon은 CIL 프레임워크 11 를활용하여 OCaml 언어로구현하였다. CIL 프레임워크는 C 언어프로그램을단순한중간언어로변환해주며구문트리수준에서프로그램을다루기위한다양한함수를제공하므로 C 언어프로그램을분석하는도구를개발하기에적합한환경이다. [ 표 1] 은 Raccoon을이용해몇가지 GNU 소프트웨어들을분석한결과이다. 크기는 CIL을이용해대상소프트웨어를하나의파일로병합한후에측정한소스코드의줄수이다. 2 단계분석에소요되는시간을셋째칸에나타냈고, 3 단계와 4 단계분석에소요되는시간을더하여넷째칸에나타냈다. 실험에는 Xeon 3.2 GHz CPU와 4.0 GB RAM을탑재한리눅스시스템을이용했다. 속도면에서만보면 Raccoon은소스코드의크기가 3만줄에달하는프로그램을 4 분이내에분석할수있었지만, 다수의잘못된경고메시지를출력하고있으므로정확도면에서는아직만족할만한결과를보여주지못하고있다. Raccoon이정확한분석을수행하지못하는대표적인원인중하나는 C 표준라이브러리함수들을모델링하지않았다는것이다. 지금까지는주로분석의속도향상에중점을두어개발을진행했는데, 분석의효율성을유지하면서정확도를개선하기위한연구를계속수행할계획이다. 실험결과는제안하는구조를통해안전한정적분석도구의분석속도를크게향상시킬수있을것이라는추측을뒷받침하고있다. 우리는분석의속도를더욱개선하는것이가능할것으로보고있다. 2 단계분석을수행할때는포인터연산만수행하는함수를빠르게건너뛰는등각단계의분석을보다특화시키는방법과프로그램의모듈성을활용하여분석의범위를줄이는방법으로분석의효율성을더욱개선할것이다. Raccoon이잘못된경고메시지를걸러내기위해취하는방식은분석의정확도를조절하여분석을반복하는것이다. [ 그림 8] 의설계에는이러한의도가반영되 어있지만, 아직구현이완료되지는않았다. 5 단계는각경고메시지의신뢰도를평가하고, 잘못된경고메시지로추측되는경우에는경고메시지와관련된부분을보다정확한분석기법으로분석하도록각분석단계를조절한다. 경고메시지와직접적으로관련되지않은부분에대해서는이전의분석결과를재사용하여추가분석에소요되는시간을최소화할수있을것이다. Ⅵ. 결론본고에서는버퍼오버플로우취약점의유형과다양한공격방법에대해소개하고, 버퍼오버플로우취약점을검출하기위한정적분석도구들의현황을살펴보았다. 다수의정적분석도구들이안전하지않은분석기법을사용하여일부버퍼오버플로우취약점을빠르게찾아내는것에중점을두고있으며, 안전한정적분석도구들은충분히만족할만한성능을보여주지못하고있다는것을알게되었다. 우리는안전한정적분석기법을사용하는효율적인버퍼오버플로우정적분석기를개발하기위한연구를수행하고있는데, 본고에서지금까지의연구성과를일부소개하였다. 본고에서제안하는방법들을통해정확하면서도효율적인정적분석도구를개발할수있을것으로기대하고있다. 본고에서설명한내용들은소프트웨어보안분야의연구자들에게프로그램정적분석분야의연구성과를소개하는기회가될것이고, 동시에프로그램정적분석분야의연구자들에게향후연구방향을제시하는참고자료가될수있을것이다. 참고문헌 [1] R. Secord, Secure Coding in C and C++, Addison Wesley, [2] Aleph One, "Smashing the Stack for Fun and Profit", Phrack, 49, [3] M. Kaempf, "Vudo - An object superstitiously believed to embody magical powers", Phrack 57, [4] J. Pincus, B. Baker, "Beyond Stack Smashing: Recent Advances in Exploiting Buffer Overruns", IEEE Security & Privacy, 2(4), pp , Jul/Aug 2004.

10 54 버퍼오버플로우검출을위한정적분석도구의현황과전망 [5] D. Wagner, J. Foster, E. Brewer, A. Aiken, "A First Step Towards Automated Detection of Buffer Overrun Vulnerabilities", NDSS'00. [6] D. Larochelle, D. Evans, "Statically Detecting Likely Buffer Overflow Vulnerabilities", USENIX Security [7] Y. Xie, A. Chou, D. Engler, "ARCHER: Using Symbolic, Path-sensitive Analysis to Detect Memory Access Errors", ESEC/FSE'03. [8] M. Zitser, R. Lippmann, T. Leek, "Testing Static Analysis Tools using Exploitable Buffer Overflows from Open Source Code", SIGSOFT'04/FSE-12. [9] S. Hallem, B. Chelf, Y. Xie, D. Engler, "A System and Language for Building System-Specific, Static Analyses", PLDI'02. [10] Y. Jung, J. Kim, J. Shin, K. Yi, "Taming False Alarms from a Domain-Unaware C Analyzer by a Bayesian Statistical Post Analysis", SAS'05. [11] [12] [13] [14] [15] B. Steensgaard, "Points-to Analysis in Almost Linear Time", PLDI'96. [16] P. Cousot, R. Cousot. "Abstract Interpretation: A Unified Lattice Model for Static Analysis of Programs by Construction or Approximation of Fixpoints", POPL'77. [17] P. Cousot, R. Cousot, "Automatic Discovery of Linear Restraints Among Variables of a Program", POPL'78. [18] A. Mine, "Weakly Relational Abstract Domains: Theory and Applications", NSAD'05. < 著者紹介 > 김유일 (Youil Kim) 2001년 : KAIST 전자전산학과 전산학전공학사 2003년 : KAIST 전자전산학과 전산학전공석사 2003년~ 현재 : KAIST 전자전산 학과전산학전공박사과정관심분야 : 프로그램정적분석 한환수 (Hwansoo Han) 정회원 1993년 : 서울대학교컴퓨터공학과 학사 1995년 : 서울대학교컴퓨터공학과 석사 2001년 : Ph.D., Computer Science, University of Maryland 2001년 ~2003년 : Sr. Engineer, Intel Architecture Group, Intel 2003년~ 현재 : KAIST 전자전산학과전산학전공조교수 관심분야 : 프로그램정적분석, 임베디드시스템

슬라이드 1

슬라이드 1 -Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역

More information

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - chap06-2pointer.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.

More information

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

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 13. 포인터와배열! 함께이해하기 2013.10.02. 오병우 컴퓨터공학과 13-1 포인터와배열의관계 Programming in C, 정재은저, 사이텍미디어. 9 장참조 ( 교재의 13-1 은읽지말것 ) 배열이름의정체 배열이름은 Compile 시의 Symbol 로서첫번째요소의주소값을나타낸다. Symbol 로서컴파일시에만유효함 실행시에는메모리에잡히지않음

More information

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

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx #include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의

More information

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - ch07 - 포인터 pm0415 2015-1 프로그래밍언어 7. 포인터 (Pointer), 동적메모리할당 2015 년 4 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) Outline 포인터 (pointer) 란? 간접참조연산자

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 System Software Experiment 1 Lecture 5 - Array Spring 2019 Hwansoo Han (hhan@skku.edu) Advanced Research on Compilers and Systems, ARCS LAB Sungkyunkwan University http://arcs.skku.edu/ 1 배열 (Array) 동일한타입의데이터가여러개저장되어있는저장장소

More information

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

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 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 Example 3.1 Files 3.2 Source code 3.3 Exploit flow

More information

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770> 연습문제해답 5 4 3 2 1 0 함수의반환값 =15 5 4 3 2 1 0 함수의반환값 =95 10 7 4 1-2 함수의반환값 =3 1 2 3 4 5 연습문제해답 1. C 언어에서의배열에대하여다음중맞는것은? (1) 3차원이상의배열은불가능하다. (2) 배열의이름은포인터와같은역할을한다. (3) 배열의인덱스는 1에서부터시작한다. (4) 선언한다음, 실행도중에배열의크기를변경하는것이가능하다.

More information

11장 포인터

11장 포인터 누구나즐기는 C 언어콘서트 제 9 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 메모리의구조 변수는메모리에저장된다. 메모리는바이트단위로액세스된다. 첫번째바이트의주소는 0, 두번째바이트는 1, 변수와메모리

More information

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

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include

More information

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

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 System call table and linkage v Ref. http://www.ibm.com/developerworks/linux/library/l-system-calls/ - 2 - Young-Jin Kim SYSCALL_DEFINE 함수

More information

JVM 메모리구조

JVM 메모리구조 조명이정도면괜찮조! 주제 JVM 메모리구조 설미라자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조장. 최지성자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조원 이용열자료조사, 자료작성, PPT 작성, 보고서작성. 이윤경 자료조사, 자료작성, PPT작성, 보고서작성. 이수은 자료조사, 자료작성, PPT작성, 보고서작성. 발표일 2013. 05.

More information

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

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100 2015-1 프로그래밍언어 9. 연결형리스트, Stack, Queue 2015 년 5 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) 연결리스트 (Linked List) 연결리스트연산 Stack

More information

11장 포인터

11장 포인터 Dynamic Memory and Linked List 1 동적할당메모리의개념 프로그램이메모리를할당받는방법 정적 (static) 동적 (dynamic) 정적메모리할당 프로그램이시작되기전에미리정해진크기의메모리를할당받는것 메모리의크기는프로그램이시작하기전에결정 int i, j; int buffer[80]; char name[] = data structure"; 처음에결정된크기보다더큰입력이들어온다면처리하지못함

More information

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

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 (   ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각 JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( http://java.sun.com/javase/6/docs/api ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각선의길이를계산하는메소드들을작성하라. 직사각형의가로와세로의길이는주어진다. 대각선의길이는 Math클래스의적절한메소드를이용하여구하라.

More information

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

Microsoft PowerPoint - additional01.ppt [호환 모드] 1.C 기반의 C++ part 1 함수 오버로딩 (overloading) 디폴트매개변수 (default parameter) 인-라인함수 (in-line function) 이름공간 (namespace) Jong Hyuk Park 함수 Jong Hyuk Park 함수오버로딩 (overloading) 함수오버로딩 (function overloading) C++ 언어에서는같은이름을가진여러개의함수를정의가능

More information

설계란 무엇인가?

설계란 무엇인가? 금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 5 강. 배열, 포인터, 참조목차 배열 포인터 C++ 메모리구조 주소연산자 포인터 포인터연산 배열과포인터 메모리동적할당 문자열 참조 1 /20 5 강. 배열, 포인터, 참조배열 배열 같은타입의변수여러개를하나의변수명으로처리 int Ary[10]; 총 10 개의변수 : Ary[0]~Ary[9]

More information

Chapter 4. LISTS

Chapter 4. LISTS C 언어에서리스트구현 리스트의생성 struct node { int data; struct node *link; ; struct node *ptr = NULL; ptr = (struct node *) malloc(sizeof(struct node)); Self-referential structure NULL: defined in stdio.h(k&r C) or

More information

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

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Function) 1. 함수의개념 입력에대해적절한출력을발생시켜주는것 내가 ( 프로그래머 ) 작성한명령문을연산, 처리, 실행해주는부분 ( 모듈 ) 자체적으로실행되지않으며,

More information

Observational Determinism for Concurrent Program Security

Observational Determinism for  Concurrent Program Security 웹응용프로그램보안취약성 분석기구현 소프트웨어무결점센터 Workshop 2010. 8. 25 한국항공대학교, 안준선 1 소개 관련연구 Outline Input Validation Vulnerability 연구내용 Abstract Domain for Input Validation Implementation of Vulnerability Analyzer 기존연구

More information

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

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

More information

Microsoft PowerPoint - [2009] 02.pptx

Microsoft PowerPoint - [2009] 02.pptx 원시데이터유형과연산 원시데이터유형과연산 원시데이터유형과연산 숫자데이터유형 - 숫자데이터유형 원시데이터유형과연산 표준입출력함수 - printf 문 가장기본적인출력함수. (stdio.h) 문법 ) printf( Test printf. a = %d \n, a); printf( %d, %f, %c \n, a, b, c); #include #include

More information

설계란 무엇인가?

설계란 무엇인가? 금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 6 강. 함수와배열, 포인터, 참조목차 함수와포인터 주소값의매개변수전달 주소의반환 함수와배열 배열의매개변수전달 함수와참조 참조에의한매개변수전달 참조의반환 프로그래밍연습 1 /15 6 강. 함수와배열, 포인터, 참조함수와포인터 C++ 매개변수전달방법 값에의한전달 : 변수값,

More information

Data Structure

Data Structure Function & Pointer C- 언어의활용을위한주요기법 (3) Dong Kyue Kim Hanyang University dqkim@hanyang.ac.kr 함수의인자전달 함수의인자전달 함수의인자전달방식 인자전달의기본방식은복사다. 함수호출시전달되는값을매개변수를통해서전달받는데, 이때에값의복사가일어난다. int main(void) int val = 10;

More information

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver. 2.0 jbyoo@konkuk.ac.kr http://dslab.konkuk.ac.kr 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 이번장에서학습할내용 이중포인터란무엇인가? 포인터배열 함수포인터 다차원배열과포인터 void 포인터 포인터는다양한용도로유용하게활용될수있습니다. 2 이중포인터

More information

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D> 리눅스 오류처리하기 2007. 11. 28 안효창 라이브러리함수의오류번호얻기 errno 변수기능오류번호를저장한다. 기본형 extern int errno; 헤더파일 라이브러리함수호출에실패했을때함수예 정수값을반환하는함수 -1 반환 open 함수 포인터를반환하는함수 NULL 반환 fopen 함수 2 유닉스 / 리눅스 라이브러리함수의오류번호얻기 19-1

More information

BMP 파일 처리

BMP 파일 처리 BMP 파일처리 김성영교수 금오공과대학교 컴퓨터공학과 학습내용 영상반전프로그램제작 2 Inverting images out = 255 - in 3 /* 이프로그램은 8bit gray-scale 영상을입력으로사용하여반전한후동일포맷의영상으로저장한다. */ #include #include #define WIDTHBYTES(bytes)

More information

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

Microsoft PowerPoint - chap06-5 [호환 모드] 2011-1 학기프로그래밍입문 (1) chapter 06-5 참고자료 변수의영역과데이터의전달 박종혁 Tel: 970-6702 Email: jhpark1@seoultech.ac.kr h k 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- ehanbit.net 자동변수 지금까지하나의함수안에서선언한변수는자동변수이다. 사용범위는하나의함수내부이다. 생존기간은함수가호출되어실행되는동안이다.

More information

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

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning C Programming Practice (II) Contents 배열 문자와문자열 구조체 포인터와메모리관리 구조체 2/17 배열 (Array) (1/2) 배열 동일한자료형을가지고있으며같은이름으로참조되는변수들의집합 배열의크기는반드시상수이어야한다. type var_name[size]; 예 ) int myarray[5] 배열의원소는원소의번호를 0 부터시작하는색인을사용

More information

Frama-C/JESSIS 사용법 소개

Frama-C/JESSIS 사용법 소개 Frama-C 프로그램검증시스템소개 박종현 @ POSTECH PL Frama-C? C 프로그램대상정적분석도구 플러그인구조 JESSIE Wp Aorai Frama-C 커널 2 ROSAEC 2011 동계워크샵 @ 통영 JESSIE? Frama-C 연역검증플러그인 프로그램분석 검증조건추출 증명 Hoare 논리에기초한프로그램검증도구 사용법 $ frama-c jessie

More information

OCW_C언어 기초

OCW_C언어 기초 초보프로그래머를위한 C 언어기초 2 장 : C 프로그램시작하기 2012 년 이은주 학습목표 을작성하면서 C 프로그램의구성요소 주석 (comment) 이란무엇인지알아보고, 주석을만드는방법 함수란무엇인지알아보고, C 프로그램에반드시필요한 main 함수 C 프로그램에서출력에사용되는 printf 함수 변수의개념과변수의값을입력받는데사용되는 scanf 함수 2 목차 프로그램코드

More information

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

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures 단일연결리스트 (Singly Linked List) 신찬수 연결리스트 (linked list)? tail 서울부산수원용인 null item next 구조체복습 struct name_card { char name[20]; int date; } struct name_card a; // 구조체변수 a 선언 a.name 또는 a.date // 구조체 a의멤버접근 struct

More information

Microsoft PowerPoint - Chapter_08.pptx

Microsoft PowerPoint - Chapter_08.pptx 프로그래밍 1 1 Chapter 8. Pointers May, 2016 Dept. of software Dankook University http://embedded.dankook.ac.kr/~baeksj 포인터의개념 (1/6) 2 포인터란 : 다른객체를가리키는변수 객체의메모리주소를저장하는변수 기호적방식 (symbolic way) 으로주소사용 포인터와관련된연산자

More information

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

Microsoft PowerPoint - chap10-함수의활용.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 중 값에 의한 전달 방법과

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Chapter 10 포인터 01 포인터의기본 02 인자전달방법 03 포인터와배열 04 포인터와문자열 변수의주소를저장하는포인터에대해알아본다. 함수의인자를값과주소로전달하는방법을알아본다. 포인터와배열의관계를알아본다. 포인터와문자열의관계를알아본다. 1.1 포인터선언 포인터선언방법 자료형 * 변수명 ; int * ptr; * 연산자가하나이면 1 차원포인터 1 차원포인터는일반변수의주소를값으로가짐

More information

API 매뉴얼

API 매뉴얼 PCI-DIO12 API Programming (Rev 1.0) Windows, Windows2000, Windows NT and Windows XP are trademarks of Microsoft. We acknowledge that the trademarks or service names of all other organizations mentioned

More information

Microsoft PowerPoint - C++ 5 .pptx

Microsoft PowerPoint - C++ 5 .pptx C++ 언어프로그래밍 한밭대학교전자. 제어공학과이승호교수 연산자중복 (operator overloading) 이란? 2 1. 연산자중복이란? 1) 기존에미리정의되어있는연산자 (+, -, /, * 등 ) 들을프로그래머의의도에맞도록새롭게정의하여사용할수있도록지원하는기능 2) 연산자를특정한기능을수행하도록재정의하여사용하면여러가지이점을가질수있음 3) 하나의기능이프로그래머의의도에따라바뀌어동작하는다형성

More information

이 장에서 사용되는 MATLAB 명령어들은 비교적 복잡하므로 MATLAB 창에서 명령어를 직접 입력하지 않고 확장자가 m 인 text 파일을 작성하여 실행을 한다

이 장에서 사용되는 MATLAB 명령어들은 비교적 복잡하므로 MATLAB 창에서 명령어를 직접 입력하지 않고 확장자가 m 인 text 파일을 작성하여 실행을 한다 이장에서사용되는 MATLAB 명령어들은비교적복잡하므로 MATLAB 창에서명령어를직접입력하지않고확장자가 m 인 text 파일을작성하여실행을한다. 즉, test.m 과같은 text 파일을만들어서 MATLAB 프로그램을작성한후실행을한다. 이와같이하면길고복잡한 MATLAB 프로그램을작성하여실행할수있고, 오류가발생하거나수정이필요한경우손쉽게수정하여실행할수있는장점이있으며,

More information

PowerPoint Presentation

PowerPoint Presentation #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을작성하면서 C 프로그램의구성요소에대하여알아본다.

More information

Microsoft PowerPoint - chap06-1Array.ppt

Microsoft PowerPoint - chap06-1Array.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-1 참고자료 배열 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 배열의선언과사용 같은형태의자료형이많이필요할때배열을사용하면효과적이다. 배열의선언 배열의사용 배열과반복문 배열의초기화 유연성있게배열다루기 한빛미디어

More information

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

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2 제 17 장동적메모리와연결리스트 유준범 (JUNBEOM YOO) Ver. 2.0 jbyoo@konkuk.ac.kr http://dslab.konkuk.ac.kr 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다.

More information

Microsoft PowerPoint - CSharp-10-예외처리

Microsoft PowerPoint - CSharp-10-예외처리 10 장. 예외처리 예외처리개념 예외처리구문 사용자정의예외클래스와예외전파 순천향대학교컴퓨터학부이상정 1 예외처리개념 순천향대학교컴퓨터학부이상정 2 예외처리 오류 컴파일타임오류 (Compile-Time Error) 구문오류이기때문에컴파일러의구문오류메시지에의해쉽게교정 런타임오류 (Run-Time Error) 디버깅의절차를거치지않으면잡기어려운심각한오류 시스템에심각한문제를줄수도있다.

More information

PowerPoint Presentation

PowerPoint Presentation 컴퓨터프로그래밍 Computer Programming 08 포인터기초 목차 1. 포인터변수와선언 2. 간접연산자 * 와포인터연산 3. 포인터형변환과다중포인터 컴퓨터프로그래밍 (Computer Programming) - 08 포인터기초 3 1. 포인터변수와선언 주소개념 주소 address 메모리공간은 8비트인 1 바이트마다순차적인고유한번호 메모리주소는저장장소인변수이름과함께기억장소를참조하는또다른방법

More information

Microsoft PowerPoint - Lecture_Note_7.ppt [Compatibility Mode]

Microsoft PowerPoint - Lecture_Note_7.ppt [Compatibility Mode] Unix Process Department of Computer Engineering Kyung Hee University. Choong Seon Hong 1 유닉스기반다중서버구현방법 클라이언트들이동시에접속할수있는서버 서비스를동시에처리할수있는서버프로세스생성을통한멀티태스킹 (Multitasking) 서버의구현 select 함수에의한멀티플렉싱 (Multiplexing)

More information

17장 클래스와 메소드

17장 클래스와 메소드 17 장클래스와메소드 박창이 서울시립대학교통계학과 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 1 / 18 학습내용 객체지향특징들객체출력 init 메소드 str 메소드연산자재정의타입기반의버전다형성 (polymorphism) 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 2 / 18 객체지향특징들 객체지향프로그래밍의특징 프로그램은객체와함수정의로구성되며대부분의계산은객체에대한연산으로표현됨객체의정의는

More information

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

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2 제 8 장. 포인터 목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2 포인터의개요 포인터란? 주소를변수로다루기위한주소변수 메모리의기억공간을변수로써사용하는것 포인터변수란데이터변수가저장되는주소의값을 변수로취급하기위한변수 C 3 포인터의개요 포인터변수및초기화 * 변수데이터의데이터형과같은데이터형을포인터 변수의데이터형으로선언 일반변수와포인터변수를구별하기위해

More information

Microsoft PowerPoint - chap01-C언어개요.pptx

Microsoft PowerPoint - chap01-C언어개요.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 프로그래밍의 기본 개념을

More information

<B1E2BCFAB9AEBCAD5FB9DABAB4B1D45F F F64746F72732E687770>

<B1E2BCFAB9AEBCAD5FB9DABAB4B1D45F F F64746F72732E687770> 기술문서 09. 11. 3. 작성 Format String Bug 에서 dtors 우회 작성자 : 영남대학교 @Xpert 박병규 preex@ynu.ac.kr 1. 요약... 2 2. d to r 이란... 3 3. 포맷스트링... 4 4. ro o t 권한획득... 7 5. 참고자료... 1 0-1 - 1. 요약 포맷스트링버그 (Format String bug)

More information

Microsoft Word - FunctionCall

Microsoft Word - FunctionCall Function all Mechanism /* Simple Program */ #define get_int() IN KEYOARD #define put_int(val) LD A val \ OUT MONITOR int add_two(int a, int b) { int tmp; tmp = a+b; return tmp; } local auto variable stack

More information

chap 5: Trees

chap 5: Trees 5. Threaded Binary Tree 기본개념 n 개의노드를갖는이진트리에는 2n 개의링크가존재 2n 개의링크중에 n + 1 개의링크값은 null Null 링크를다른노드에대한포인터로대체 Threads Thread 의이용 ptr left_child = NULL 일경우, ptr left_child 를 ptr 의 inorder predecessor 를가리키도록변경

More information

C 프로그램의 기본

C 프로그램의 기본 C 프로그램의기본 목차 C 프로그램의구성요소 주석 main 함수 출력 C 언어의입력과출력 변수 printf 함수 scanf 함수 2 예제 2-1 : 첫번째 C 프로그램 3 2.1.1 주석 주석의용도 프로그램에대한설명 프로그램전체에대한대략적인정보를제공 프로그램수행에영향을미치지않는요소 4 2.1.1 주석 주석사용방법 /* 과 */ 을이용한여러줄주석 // 을이용한한줄주석

More information

03_queue

03_queue Queue Data Structures and Algorithms 목차 큐의이해와 ADT 정의 큐의배열기반구현 큐의연결리스트기반구현 큐의활용 덱 (Deque) 의이해와구현 Data Structures and Algorithms 2 큐의이해와 ADT 정의 Data Structures and Algorithms 3 큐 (Stack) 의이해와 ADT 정의 큐는 LIFO(Last-in,

More information

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

Microsoft PowerPoint - chap13-입출력라이브러리.pptx #include int main(void) int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; 1 학습목표 스트림의 기본 개념을 알아보고,

More information

슬라이드 1

슬라이드 1 6-1 리스트 (list) 란순서를가진항목들을표현하는자료구조 리스트를구현하는두가지방법 배열 (array) 을이용하는방법 구현간단 삽입, 삭제시오버헤드 항목의개수제한 연결리스트 (linked list) 를이용하는방법 구현복잡 삽입, 삭제가효율적 크기가제한되지않음 6-2 객체 : n 개의 element 형으로구성된순서있는모임 연산 : add_last(list,

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 실습 1 배효철 th1g@nate.com 1 목차 조건문 반복문 System.out 구구단 모양만들기 Up & Down 2 조건문 조건문의종류 If, switch If 문 조건식결과따라중괄호 { 블록을실행할지여부결정할때사용 조건식 true 또는 false값을산출할수있는연산식 boolean 변수 조건식이 true이면블록실행하고 false 이면블록실행하지않음 3

More information

리눅스 취약점대응방안권고 / KISA 취약점점검팀 영향받는플랫폼 OS, FAQ 추가 개요 미국보안회사 에의해 시스템의 라이브러리 의특정함수에서임의코드를실행할수있는취약점이공개 해당취약점은 CVE 지정, 도메인네임을

리눅스 취약점대응방안권고 / KISA 취약점점검팀 영향받는플랫폼 OS, FAQ 추가 개요 미국보안회사 에의해 시스템의 라이브러리 의특정함수에서임의코드를실행할수있는취약점이공개 해당취약점은 CVE 지정, 도메인네임을 리눅스 취약점대응방안권고 15. 01. 29 / KISA 취약점점검팀 15. 01. 30 영향받는플랫폼 OS, FAQ 추가 개요 미국보안회사 에의해 시스템의 라이브러리 의특정함수에서임의코드를실행할수있는취약점이공개 해당취약점은 CVE-2015-0235 지정, 도메인네임을 IP로변환하는기능이포함된서비스 ( 메일, 웹등 ) 들은해당취약점에영향을받을수있음 취약점상세분석

More information

쉽게배우는알고리즘 6장. 해시테이블 테이블 Hash Table

쉽게배우는알고리즘 6장. 해시테이블 테이블 Hash Table 쉽게배우는알고리즘 6장. 해시테이블 테이블 Hash Table http://academy.hanb.co.kr 6장. 해시테이블 테이블 Hash Table 사실을많이아는것보다는이론적틀이중요하고, 기억력보다는생각하는법이더중요하다. - 제임스왓슨 - 2 - 학습목표 해시테이블의발생동기를이해한다. 해시테이블의원리를이해한다. 해시함수설계원리를이해한다. 충돌해결방법들과이들의장단점을이해한다.

More information

Microsoft PowerPoint - 제11장 포인터(강의)

Microsoft PowerPoint - 제11장 포인터(강의) 쉽게풀어쓴 C 언어 Express 제 11 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 1003 1004 1005 영화관 1002 1006 1001 포인터 (pointer) 1007 메모리의구조

More information

02장.배열과 클래스

02장.배열과 클래스 ---------------- DATA STRUCTURES USING C ---------------- CHAPTER 배열과구조체 1/20 많은자료의처리? 배열 (array), 구조체 (struct) 성적처리프로그램에서 45 명의성적을저장하는방법 주소록프로그램에서친구들의다양한정보 ( 이름, 전화번호, 주소, 이메일등 ) 를통합하여저장하는방법 홍길동 이름 :

More information

Microsoft PowerPoint - o8.pptx

Microsoft PowerPoint - o8.pptx 메모리보호 (Memory Protection) 메모리보호를위해 page table entry에 protection bit와 valid bit 추가 Protection bits read-write / read-only / executable-only 정의 page 단위의 memory protection 제공 Valid bit (or valid-invalid bit)

More information

C++ Programming

C++ Programming C++ Programming 연산자다중정의 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 연산자다중정의 C++ 스타일의문자열 2 연산자다중정의 연산자다중정의 단항연산자다중정의 이항연산자다중정의 cin, cout 그리고 endl C++ 스타일의문자열 3 연산자다중정의 연산자다중정의 (Operator

More information

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

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout <<  양수입력 : ; cin >> *p; if (*p <= 0) cout <<  양수를입력해야합니다  << endl; return; 동적할 15 장기타주제들 auto_ptr 변환함수 cast 연산자에의한명시적형변환실행시간타입정보알아내기 (RTTI) C++ 프로그래밍입문 1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout > *p; if (*p

More information

example code are examined in this stage The low pressure pressurizer reactor trip module of the Plant Protection System was programmed as subject for

example code are examined in this stage The low pressure pressurizer reactor trip module of the Plant Protection System was programmed as subject for 2003 Development of the Software Generation Method using Model Driven Software Engineering Tool,,,,, Hoon-Seon Chang, Jae-Cheon Jung, Jae-Hack Kim Hee-Hwan Han, Do-Yeon Kim, Young-Woo Chang Wang Sik, Moon

More information

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조 - Part2- 제 2 장다차원배열이란무엇인가 학습목차 2.1 다차원배열이란 2. 2 2 차원배열의주소와값의참조 2.1 다차원배열이란 2.1 다차원배열이란 (1/14) 다차원배열 : 2 차원이상의배열을의미 1 차원배열과다차원배열의비교 1 차원배열 int array [12] 행 2 차원배열 int array [4][3] 행 열 3 차원배열 int array [2][2][3]

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 오픈소스소프트웨어개발입문 (CP33992) 포인터 부산대학교공과대학정보컴퓨터공학부 학습목표 포인터선언과간접참조를통한포인터사용방법을알수있다. 함수의인수전달에서포인터의역할및사용방법을알수있다. 포인터를통한배열원소의참조방법에대해알수있다. 포인터의가감연산을통한다양한활용법을알수있다. 포인터를이용한문자열처리에대해알수있다. void 포인터, 함수포인터의사용방법을알수있다.

More information

PowerPoint Presentation

PowerPoint Presentation Package Class 3 Heeseung Jo 목차 section 1 패키지개요와패키지의사용 section 2 java.lang 패키지의개요 section 3 Object 클래스 section 4 포장 (Wrapper) 클래스 section 5 문자열의개요 section 6 String 클래스 section 7 StringBuffer 클래스 section

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 DEVELOPMENT ENVIRONMENT 2 MAKE Jo, Heeseung MAKE Definition make is utility to maintain groups of programs Object If some file is modified, make detects it and update files related with modified one 2

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Development Environment 2 Jo, Heeseung make make Definition make is utility to maintain groups of programs Object If some file is modified, make detects it and update files related with modified one It

More information

취약점분석보고서 [Photodex ProShow Producer v ] RedAlert Team 안상환

취약점분석보고서 [Photodex ProShow Producer v ] RedAlert Team 안상환 취약점분석보고서 [Photodex ProShow Producer v5.0.3256] 2012-07-24 RedAlert Team 안상환 목 차 1. 개요... 1 1.1. 취약점분석추진배경... 1 2. Photodex ProShow Producer Buffer Overflow 취약점분석... 2 2.1. Photodex ProShow Producer Buffer

More information

Microsoft PowerPoint - 제11장 포인터

Microsoft PowerPoint - 제11장 포인터 쉽게풀어쓴 C 언어 Express 제 11 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 1003 1004 1005 영화관 1002 1006 1001 포인터 (pointer) 1007 메모리의구조

More information

PowerPoint Template

PowerPoint Template 10 포인터 1 주소 Address( 주소 ) 메모리에는그메모리의저장장소의위치를나타내는주소값 주소 (address) 는 1 바이트마다 1 씩증가하도록메모리에는연속적인번호가구성 2 주소연산자 & & 변수 변수의주소값을알아내려면변수앞에주소연산자 & (ampersand) 를이용 주소값이용장단점 주소값을이용하면보다편리하고융통성있는프로그램이가능 그러나복잡하고어려운단점

More information

PowerPoint Template

PowerPoint Template 16-1. 보조자료템플릿 (Template) 함수템플릿 클래스템플릿 Jong Hyuk Park 함수템플릿 Jong Hyuk Park 함수템플릿소개 함수템플릿 한번의함수정의로서로다른자료형에대해적용하는함수 예 int abs(int n) return n < 0? -n : n; double abs(double n) 함수 return n < 0? -n : n; //

More information

PowerPoint Presentation

PowerPoint Presentation 자바프로그래밍 1 배열 손시운 ssw5176@kangwon.ac.kr 배열이필요한이유 예를들어서학생이 10 명이있고성적의평균을계산한다고가정하자. 학생 이 10 명이므로 10 개의변수가필요하다. int s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; 하지만만약학생이 100 명이라면어떻게해야하는가? int s0, s1, s2, s3, s4,

More information

Chapter 4. LISTS

Chapter 4. LISTS 6. 동치관계 (Equivalence Relations) 동치관계 reflexive, symmetric, transitive 성질을만족 "equal to"(=) 관계는동치관계임. x = x x = y 이면 y = x x = y 이고 y = z 이면 x = z 동치관계를이용하여집합 S 를 동치클래스 로분할 동일한클래스내의원소 x, y 에대해서는 x y 관계성립

More information

2002년 2학기 자료구조

2002년 2학기 자료구조 자료구조 (Data Structures) Chapter 1 Basic Concepts Overview : Data (1) Data vs Information (2) Data Linear list( 선형리스트 ) - Sequential list : - Linked list : Nonlinear list( 비선형리스트 ) - Tree : - Graph : (3)

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 제 3 장함수와문자열 1. 함수의기본적인개념을이해한다. 2. 인수와매개변수의개념을이해한다. 3. 함수의인수전달방법 2가지를이해한다 4. 중복함수를이해한다. 5. 디폴트매개변수를이해한다. 6. 문자열의구성을이해한다. 7. string 클래스의사용법을익힌다. 이번장에서만들어볼프로그램 함수란? 함수선언 함수호출 예제 #include using

More information

DBPIA-NURIMEDIA

DBPIA-NURIMEDIA 424 정보과학회논문지 : 컴퓨팅의실제및레터제 19 권제 8 호 (2013.8) 사례연구를통한정적프로그램분석기법을사용하는도구의비교 (A Comparative Case Study on Static Program Analysis Tools) 김윤호 박용배 (Yunho Kim) 김문주 (Moonzoo Kim) (Yongbae Park) 요약프로그램신뢰성향상을위해서정적프로그램분석도구가많이사용되고있다.

More information

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드]

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드] Chapter 03 변수와자료형 2009 한국항공대학교항공우주기계공학부 (http://mercury.kau.ac.kr/sjkwon) 1 변수와자료유형 변수 프로그램에서자료값을임시로기억할수있는저장공간을변수 (variables) 변수 (Variables) 는컴퓨터의메모리인 RAM(Random Access Memory) 에저장 물건을담는박스라고생각한다면박스의크기에따라담을물건이제한됨

More information

제 11 장포인터 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

제 11 장포인터 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 제 11 장포인터 유준범 (JUNBEOM YOO) Ver. 2.0 jbyoo@konkuk.ac.kr http://dslab.konkuk.ac.kr 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습합니다.

More information

Microsoft PowerPoint - 03_(C_Programming)_(Korean)_Pointers

Microsoft PowerPoint - 03_(C_Programming)_(Korean)_Pointers C Programming 포인터 (Pointers) Seo, Doo-Ok Clickseo.com clickseo@gmail.com 목 차 포인터의이해 다양한포인터 2 포인터의이해 포인터의이해 포인터변수선언및초기화 포인터연산 다양한포인터 3 주소연산자 ( & ) 포인터의이해 (1/4) 변수와배열원소에만적용한다. 산술식이나상수에는주소연산자를사용할수없다. 레지스터변수또한주소연산자를사용할수없다.

More information

Figure 1: 현존하는 정적 분석 기술의 한계와 본 연구의 목표. 이러한 허위경보(false alarm)를 가질 수 밖에 없는데, 오탐율(전체 경보중 허위경보의 비율)이 정확도의 척도가 된다. 유용한 정적 분석기는 충분히 낮은 허위경보율을 가져야 한다. 대형 프로그

Figure 1: 현존하는 정적 분석 기술의 한계와 본 연구의 목표. 이러한 허위경보(false alarm)를 가질 수 밖에 없는데, 오탐율(전체 경보중 허위경보의 비율)이 정확도의 척도가 된다. 유용한 정적 분석기는 충분히 낮은 허위경보율을 가져야 한다. 대형 프로그 고성능 정적 프로그램 분석 기법 오학주 고려대학교 컴퓨터학과 서론 1 1.1 소프트웨어 오류 문제 소프트웨어가 모든 산업의 기반 기술이 되면서 소프트웨어의 오류로 인해 발생하는 사회경제적 비 용이 천문학적으로 증가하고 있다. 한 예로 미국의 투자금융회사인 KCG(Knight Capital Group)은 2012년 8월 1일 하루동안 2년치의 매출액에 해당하는

More information

C언어 및 실습 C Language and Practice

C언어 및 실습  C Language and Practice C언어 및 실습 C Language and Practice Chap. 2 : 변수의 영역 동국대학교 멀티미디어공학과 Young-Sik Jeong C 언어메모리구조 지역변수들이저장되는곳. 정확히는지역변수와그에따른환경이같이저장된다. 복귀주소와호출함수의환경이저장된다. 동적기억장소를위한공간. 프로그램이실행되는중간에필요에의해서할당받는메모리영역을통칭한다. 크기가정해져있지않고유동적이다.

More information

슬라이드 1

슬라이드 1 CHAP 2: 순환 (Recursion) 순환 (recursion) 이란? 알고리즘이나함수가수행도중에자기자신을다시호출하여문제를해결하는기법 정의자체가순환적으로 되어있는경우에적합한방법 순환 (recursion) 의예 팩토리얼값구하기 피보나치수열 1 n! n*( n 1)! fib( n) 0 1 fib( n 2) n n 0 ` 1 fib( n 1) if n 0 if

More information

버퍼오버플로우-왕기초편 3.c언어에서버퍼사용하기 버퍼는 임시기억공간 이라는포괄적인개념이기때문에여러곳에존재할수있습니다. 즉, CPU 에도버퍼가존재할수있으며, 하드디스크에도존재할수있고, CD- ROM 이나프린터에도존재할수있습니다. 그리고앞의예제에서보신바와같이일반프로그램에도

버퍼오버플로우-왕기초편 3.c언어에서버퍼사용하기 버퍼는 임시기억공간 이라는포괄적인개념이기때문에여러곳에존재할수있습니다. 즉, CPU 에도버퍼가존재할수있으며, 하드디스크에도존재할수있고, CD- ROM 이나프린터에도존재할수있습니다. 그리고앞의예제에서보신바와같이일반프로그램에도 버퍼는 임시기억공간 이라는포괄적인개념이기때문에여러곳에존재할수있습니다. 즉, CPU 에도버퍼가존재할수있으며, 하드디스크에도존재할수있고, CD- ROM 이나프린터에도존재할수있습니다. 그리고앞의예제에서보신바와같이일반프로그램에도존재할수있습니다. 이번시간엔프로그램에서버퍼를사용하는법, 그중에서도 C 언어에서버퍼를사용하는방법에대해배워보겠습니다. C 언어에서버퍼를사용하는가장쉬운방법은바로변수를선언하는것인데,

More information

슬라이드 1

슬라이드 1 정적메모리할당 (Static memory allocation) 일반적으로프로그램의실행에필요한메모리 ( 변수, 배열, 객체등 ) 는컴파일과정에서결정되고, 실행파일이메모리에로드될때할당되며, 종료후에반환됨 동적메모리할당 (Dynamic memory allocation) 프로그램의실행중에필요한메모리를할당받아사용하고, 사용이끝나면반환함 - 메모리를프로그램이직접관리해야함

More information

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

Microsoft PowerPoint - chap03-변수와데이터형.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num %d\n", num); return 0; } 1 학습목표 의 개념에 대해 알아본다.

More information

Microsoft PowerPoint - chap-11.pptx

Microsoft PowerPoint - chap-11.pptx 쉽게풀어쓴 C 언어 Express 제 11 장포인터 컴퓨터프로그래밍기초 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 컴퓨터프로그래밍기초 2 포인터란? 포인터 (pointer): 주소를가지고있는변수 컴퓨터프로그래밍기초 3 메모리의구조 변수는메모리에저장된다. 메모리는바이트단위로액세스된다.

More information

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD> 2006 년 2 학기윈도우게임프로그래밍 제 8 강프레임속도의조절 이대현 한국산업기술대학교 오늘의학습내용 프레임속도의조절 30fps 맞추기 스프라이트프레임속도의조절 프레임속도 (Frame Rate) 프레임속도란? 얼마나빨리프레임 ( 일반적으로하나의완성된화면 ) 을만들어낼수있는지를나타내는척도 일반적으로초당프레임출력횟수를많이사용한다. FPS(Frame Per Sec)

More information

KNK_C_05_Pointers_Arrays_structures_summary_v02

KNK_C_05_Pointers_Arrays_structures_summary_v02 Pointers and Arrays Structures adopted from KNK C Programming : A Modern Approach 요약 2 Pointers and Arrays 3 배열의주소 #include int main(){ int c[] = {1, 2, 3, 4}; printf("c\t%p\n", c); printf("&c\t%p\n",

More information

실험 5

실험 5 실험. OP Amp 의기초회로 Inverting Amplifier OP amp 를이용한아래와같은 inverting amplifier 회로를고려해본다. ( 그림 ) Inverting amplifier 위의회로에서 OP amp의 입력단자는 + 입력단자와동일한그라운드전압, 즉 0V를유지한다. 또한 OP amp 입력단자로흘러들어가는전류는 0 이므로, 저항에흐르는전류는다음과같다.

More information

슬라이드 1

슬라이드 1 2007 년 2 학기윈도우게임프로그래밍 제 7 강프레임속도의조절 이대현 핚국산업기술대학교 학습내용 프레임속도의조절 30fps 맞추기 스프라이트프레임속도의조절 프레임속도 (Frame Rate) 프레임속도란? 얼마나빨리프레임 ( 일반적으로하나의완성된화면 ) 을만들어낼수있는지를나타내는척도 일반적으로초당프레임출력횟수를많이사용핚다. FPS(Frame Per Sec)

More information

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074> SIMATIC S7 Siemens AG 2004. All rights reserved. Date: 22.03.2006 File: PRO1_17E.1 차례... 2 심벌리스트... 3 Ch3 Ex2: 프로젝트생성...... 4 Ch3 Ex3: S7 프로그램삽입... 5 Ch3 Ex4: 표준라이브러리에서블록복사... 6 Ch4 Ex1: 실제구성을 PG 로업로드하고이름변경......

More information

C# Programming Guide - Types

C# Programming Guide - Types C# Programming Guide - Types 최도경 lifeisforu@wemade.com 이문서는 MSDN 의 Types 를요약하고보충한것입니다. http://msdn.microsoft.com/enus/library/ms173104(v=vs.100).aspx Types, Variables, and Values C# 은 type 에민감한언어이다. 모든

More information

C++ Programming

C++ Programming C++ Programming 예외처리 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 예외처리 2 예외처리 예외처리 C++ 의예외처리 예외클래스와객체 3 예외처리 예외를처리하지않는프로그램 int main() int a, b; cout > a >> b; cout

More information

Chap 6: Graphs

Chap 6: Graphs 그래프표현법 인접행렬 (Adjacency Matrix) 인접리스트 (Adjacency List) 인접다중리스트 (Adjacency Multilist) 6 장. 그래프 (Page ) 인접행렬 (Adjacency Matrix) n 개의 vertex 를갖는그래프 G 의인접행렬의구성 A[n][n] (u, v) E(G) 이면, A[u][v] = Otherwise, A[u][v]

More information

ThisJava ..

ThisJava .. 자바언어에정확한타입을추가한 ThisJava 소개 나현익, 류석영 프로그래밍언어연구실 KAIST 2014 년 1 월 14 일 나현익, 류석영 자바언어에정확한타입을추가한 ThisJava 소개 1/29 APLAS 2013 나현익, 류석영 자바 언어에 정확한 타입을 추가한 ThisJava 소개 2/29 실제로부딪힌문제 자바스크립트프로그램분석을위한요약도메인 나현익,

More information

Microsoft PowerPoint - C프로그래밍-chap15.ppt [호환 모드]

Microsoft PowerPoint - C프로그래밍-chap15.ppt [호환 모드] Chapter 15 문자열 2009 한국항공대학교항공우주기계공학부 (http://mercury.kau.ac.kr/sjkwon) 1 문자의집합체 문자열의정의 일련의문자 C 언어에서문자열앞뒤에인용부호 를이용 문자와문자열과의차이 문자열의저장 (1) 배열을이용하는방법 문자열상수 c c language 를저장하는문자열배열 항상문자열마지막에는 NULL문자를넣어야함 (2)

More information

2015 개정교육과정에따른정보과평가기준개발연구 연구책임자 공동연구자 연구협력관

2015 개정교육과정에따른정보과평가기준개발연구 연구책임자 공동연구자 연구협력관 2015 개정교육과정에따른정보과평가기준개발연구 연구책임자 공동연구자 연구협력관 2015 개정교육과정에따른정보과평가기준개발연구 연구협력진 머리말 연구요약 차례 Ⅰ 서론 1 Ⅱ 평가준거성취기준, 평가기준, 성취수준, 예시평가도구개발방향 7 Ⅲ 정보과평가준거성취기준, 평가기준, 성취수준, 예시평가도구의개발 25 Ⅳ 정보과평가준거성취기준, 평가기준, 성취수준, 예시평가도구의활용방안

More information

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

Microsoft PowerPoint 자바-기본문법(Ch2).pptx 자바기본문법 1. 기본사항 2. 자료형 3. 변수와상수 4. 연산자 1 주석 (Comments) 이해를돕기위한설명문 종류 // /* */ /** */ 활용예 javadoc HelloApplication.java 2 주석 (Comments) /* File name: HelloApplication.java Created by: Jung Created on: March

More information