OCaml 죽이기

Posted 2008.04.29 00:57
OCaml 프로그램은 이론적으로 절대 크래시가 날 수 없습니다. 외부 모듈(C로 작성된 코드)를 호출한 경우가 아니면 죽을 수가 없게 타입 시스템 자체가 디자인되었기 때문입니다.

하지만 강한 타이핑(strong typing)하는 언어라도 직렬화(OCaml에서는 Linearization 용어 사용, 자바의 Serialization과 같은 개념)를 지원하면 타입 시스템을 얼마든지 깨먹을 수 있게 됩니다. OCaml은 Marshal 모듈을 사용해 직렬화를 하는데, Marshal 모듈을 이용하면 다음과 같이 'a 타입을 'b 타입으로 강제로 바꾸는 함수(C의 캐스팅)를 작성할 수 있습니다.


# let magic_copy a =
    let s = Marshal.to_string a [Marshal.Closures] in
        Marshal.from_string s 0;;
val magic_copy : 'a -> 'b = <fun>


이렇게 작성한 후에 다음과 같이 int 타입을 float로 강제로 변환한 후에 덧셈을 하면 크래시가 발생하고 프로그램이 죽게 됩니다.

# (magic_copy 2 : float)  +. 4.5;;
Segmentation fault



  1. Favicon of http://writely.tistory.com BlogIcon hey

    | 2008.04.29 10:52 | PERMALINK | EDIT | REPLY |

    전 절대라는 말이 왜 이렇게 기분 좋죠? ^^;

  2. Favicon of http://www.hoogle.kr BlogIcon hoogle

    | 2008.04.29 16:41 신고 | PERMALINK | EDIT | REPLY |

    이런 방식으로 죽을 수 있네요... 지금 ocaml로 프로그래밍을 하고 있답니다.

  3. Favicon of https://skyul.tistory.com BlogIcon 서광열 lambda

    | 2008.04.29 21:03 신고 | PERMALINK | EDIT |

    오. OCaml로 어떤 종류의 프로그램을 작성하시나요? 대외비?^^;;

  4. Favicon of http://www.hoogle.kr BlogIcon hoogle

    | 2008.04.30 00:40 신고 | PERMALINK | EDIT | REPLY |

    음... 꼭 대외비라고 할 수는 없습니다만... C 프로그램에서 Buffer overflow를 자동으로 찾아내주는 분석기를 만들고 있습니다.

    프로그램 분석에서는 ocaml이 제일 좋은 언어라고 생각하니깐요...

    서광열님의 블로그에서 재미나는 글들을 잘 읽고 있습니다 :)

  5. Favicon of https://skyul.tistory.com BlogIcon 서광열 lambda

    | 2008.04.30 00:43 신고 | PERMALINK | EDIT |

    Static Analysis 하시나 보네요. Airac처럼 Abstract Interpretation을 사용한 방식인가요?

  6. Favicon of http://www.hoogle.kr BlogIcon hoogle

    | 2008.04.30 15:21 신고 | PERMALINK | EDIT | REPLY |

    airac을 알고 계시네요... :)
    말씀히산 AI방식으로 하는 것이 맞습니다.

    그리고 제가 그 연구실을 나왔습니다.
    앞으로 다시 그 연구실에 들어가서 박사를 할 계획입니다...

  7. Favicon of https://skyul.tistory.com BlogIcon 서광열 lambda

    | 2008.04.30 16:38 신고 | PERMALINK | EDIT |

    와^^ 저도 한 때 static analysis에 관심을 많이 가졌습니다. 학부 때 졸업 과제 연구도 Java에서 static하게 null pointer exception 찾는 쪽으로 했었고.

    UMD 교환 학생 갔을 때, Jeff Foster 교수 Program Analysis(http://www.cs.umd.edu/class/fall2007/cmsc631/) 과목 청강했었는데 매력을 느껴서 이 분야로 전공하면 어떨까라는 생각도 했었거든요.

    지금은 타임 시스템이나 프로그래밍 언어를 잘 만들어서 처음부터 버퍼 오버플로우 같은 문제가 안 생기게 잘해보자는 접근법 쪽으로 바뀌긴 했지만요.

    나중에 박사가시면 잘 부탁드립니다 (__)

  8. Favicon of http://www.grayger.com/pw/ BlogIcon grayger

    | 2008.05.01 00:34 | PERMALINK | EDIT | REPLY |

    UMD면 Findbugs를 만든 Pugh 교수가 있는 대학교.. 그 학교 CS분야가 static analysis로 유명하나봐요? 혹시 Pugh도 봤나요?

  9. 서광열

    | 2008.05.01 00:58 | PERMALINK | EDIT |

    Bill Pugh 교수님한테 Concurrency 관련 수업을 들었습니다. 수업 중간에 FindBugs 프로젝트를 적극 활용하도록 독려하더군요. UMD가 Static Analysis가 강한 학교인지는 모르겠으나 Bill Pugh, Jeff Foster, Michael Hicks 교수님들이 그쪽으로 논문을 부지런히 내시더군요. 그 때 프로그램 언어 쪽으로만 수업을 듣다보니 세 분 모두에게 수업을 듣는 영광을 누렸습니다.

  10. Favicon of http://blog.naver.com/charsyam BlogIcon CharSyam

    | 2008.05.22 11:09 | PERMALINK | EDIT | REPLY |

    웬지 느낌이 C++ 에서 private 나 const 를 선언한 변수를

    강제 형변환 한다거나(const), 메모리 주소에서 위치를 계산해서

    값을 바꾸는거와 같은 느낌입니다. ^^

Write your message and submit
« PREV : 1 : ··· : 23 : 24 : 25 : 26 : 27 : 28 : 29 : 30 : 31 : ··· : 244 : NEXT »