디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

Rust와 C FFI에서 패닉 전파에 대한 정리

나르시갤로그로 이동합니다. 2025.11.25 19:22:18
조회 41 추천 0 댓글 0

Rust와 C FFI에서 패닉 전파에 대한 정리

Rust와 C를 함께 쓰다 보면 패닉(panic)이 FFI 경계를 어떻게 넘나드는지 헷갈리기 쉽습니다. 최근에 저도 혼동이 있어서 정리해봤습니다.


1. C 함수를 Rust에서 래핑해서 호출할 때

extern "C" {
    fn c_func();
}

fn wrapper() {
    unsafe { c_func(); }
}
  • 여기서 c_func는 C에서 온 함수입니다.
  • 만약 Rust 코드(wrapper) 안에서 패닉이 발생하면, 그 패닉은 Rust 호출자에게만 전달됩니다.
  • C 함수 자체는 단순히 호출된 대상일 뿐이고, Rust 패닉이 C 함수로 거슬러 올라가는 일은 없습니다.
  • 따라서 패닉이 C 함수로 전달될 가능성은 0입니다.

2. Rust로 만든 함수를 C에서 호출할 때

#[no_mangle]
pub extern "C" fn rust_func() {
    panic!("oops");
}
  • 이 함수는 C에서 직접 호출할 수 있습니다.
  • Rust 내부에서 panic!이 발생하면, Rust 런타임은 스택 언와인딩을 시도합니다.
  • 그런데 호출자는 main() 같은 C 코드이므로, Rust 패닉이 C 경계(ABI)를 넘어가게 됩니다.
  • Rust 언와인딩이 C 코드까지 넘어가는 것은 정의되지 않은 동작(UB)입니다.
  • 대부분의 경우 Rust는 안전을 위해 프로세스를 abort합니다. 즉, 프로그램 전체가 종료됩니다.

3. 안전하게 처리하는 방법

Rust 함수를 C에 노출할 때는 반드시 catch_unwind로 패닉을 잡아야 합니다:

use std::panic::{catch_unwind, AssertUnwindSafe};

#[no_mangle]
pub extern "C" fn safe_rust_func() -> i32 {
    let result = catch_unwind(AssertUnwindSafe(|| {
        // 패닉할 수 있는 Rust 코드
        panic!("oops");
    }));

    match result {
        Ok(_) => 0,   // 성공
        Err(_) => -1, // 패닉 발생 → 에러 코드 반환
    }
}

이렇게 하면 Rust 패닉이 C 경계를 넘어가지 않고, C 쪽에서는 단순히 에러 코드로 처리할 수 있습니다.


📌 결론

  • C 함수를 Rust에서 호출할 때 → 패닉은 Rust 호출자에게만 전달, C 함수로는 전달되지 않음.
  • Rust 함수를 C에서 호출할 때 → 패닉이 C 경계를 넘어가면 UB, 보통 abort.
  • 따라서 Rust → C FFI 함수는 반드시 catch_unwind로 패닉을 잡아야 안전합니다.

추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 뛰어난 운동 신경으로 남자와 싸워도 이길 것 같은 여자 스타는? 운영자 25/11/24 - -
이슈 [디시人터뷰] 충무로가 주목하는 신예, '세계의 주인' 서수빈 운영자 25/11/24 - -
AD 대학생 필수템! What's in my Bag 운영자 25/11/21 - -
2904817 Hello world도 모르는 컴맹인데 이거 ai가 앰뒤진거임? 라그네파갤로그로 이동합니다. 11.26 50 0
2904816 "대만 문제 이해한다고"…트럼프가? 일본 난처해진 상황 발명도둑잡기(118.216) 11.26 42 0
2904814 냥덩이도 발명도둑잡기(118.216) 11.26 37 0
2904813 그 세글자 닉 우울증갤러리 출신이잖아 [4] 프갤러(106.101) 11.26 73 2
2904810 계속 진화하는 고급 아파트 커뮤니티 시설 발명도둑잡기(118.216) 11.26 37 0
2904808 ‘범죄도시 마동석’ 실제 모델 경찰관, 음주운전 적발 발명도둑잡기(118.216) 11.26 35 0
2904807 취업이 막히던 날, 릴스 하나가 길이 됐다… 종구형님의 인생 2막 발명도둑잡기(118.216) 11.26 78 0
2904805 Elite: "The game that couldn't be writte 발명도둑잡기(118.216) 11.25 36 0
2904804 싱클레어 ZX81 게임 발명도둑잡기(118.216) 11.25 38 0
2904803 삶이 점점 퍽퍽해지네 환경의 영향이란 [1] RyuDOG갤로그로 이동합니다. 11.25 100 1
2904802 니혼고 구다사이~ [8] 개멍청한유라갤로그로 이동합니다. 11.25 86 0
2904800 google 이 진성 홍어새끼들 타이밍뒷.통수한방(1.213) 11.25 38 0
2904799 나 쫒아다니면서 글쓰는건 정체가 뭐냐 프갤러(59.8) 11.25 27 0
2904797 보답으로 나도 주식추천해준다 [1] 프갤러(59.8) 11.25 50 0
2904792 나사도 감탄했다는 조선의 천재 왕 [1] 발명도둑잡기(118.216) 11.25 57 1
2904790 인텔=구글=애플=엔비디아=팔란티어=공공기관=CIA=FBI=NSA 발명도둑잡기(118.216) 11.25 30 0
2904789 나 요즘에 입에 손넣고 침흘려 [3] 재현갤로그로 이동합니다. 11.25 75 0
2904788 도둑이 많아지는 시대 특징 [1] 발명도둑잡기(118.216) 11.25 108 0
2904787 나만 잘되면 되는거야. 재현갤로그로 이동합니다. 11.25 38 0
2904784 나좀 살려주라 똥지렸는데... [3] 넥도리아(223.38) 11.25 52 1
2904783 해킹당하는중인데 어떡함? [12] 프갤러(59.8) 11.25 113 0
2904781 뉴비들을 위한 입시 면접 합격 가이드(따뜻한 조언)!= 프갤러(121.142) 11.25 45 1
2904780 인텔 다시 분리형 칩으로 돌아간것 같넹;; [2] ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 11.25 59 0
2904774 위험한 냥덩이 발명도둑잡기(118.216) 11.25 48 1
2904771 씨언어나 해라 [1] CANON갤로그로 이동합니다. 11.25 58 0
2904768 내란무새 찢재명 ㅋㅅㅋ ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 11.25 37 0
2904767 ☀+ 짧아지니 나님 빨리 주무시게 되는듯 ⭐+ [8] ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 11.25 80 0
2904760 Skia: C 스타일 API와 모던 C++의 절묘한 조합 [4] 나르시갤로그로 이동합니다. 11.25 66 0
2904759 C++, Rust, Ada 라이브러리를 다른 언어에서 사용하려면? 나르시갤로그로 이동합니다. 11.25 49 0
2904758 환율 떡락과 일본 지진으로 보건대 [5] 프갤러(49.165) 11.25 55 0
Rust와 C FFI에서 패닉 전파에 대한 정리 나르시갤로그로 이동합니다. 11.25 41 0
2904756 삼성 컴퓨터 광고 발명도둑잡기(118.216) 11.25 77 0
2904755 여름에 남겨놓은 아이스크림이 하나 있었던 듯 발명도둑잡기(118.216) 11.25 28 0
2904754 요새 만원이면 알리에서 리눅스 지원 싱글보드를 산다 [6] 발명도둑잡기(118.216) 11.25 60 0
2904753 고철 발명도둑잡기(118.216) 11.25 25 0
2904751 유튜브 숏츠 만드는 새끼들 나님꺼 자꾸 막 갔다쓰네 [3] ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 11.25 70 0
2904750 IT업계 근황 발명도둑잡기(118.216) 11.25 107 1
2904749 웹페이지 만듦 프갤러(159.26) 11.25 36 0
2904747 ❤✨☀⭐⚡☘⛩☃나님 시작합니당☃⛩☘⚡⭐☀✨❤ ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 11.25 30 0
2904746 vga32 ttgo MSX 에뮬레이터 발명도둑잡기(118.216) 11.25 21 0
2904745 pico-286 발명도둑잡기(118.216) 11.25 28 0
2904744 노인비하글 써서 프갤 하루 글 차단했냐 관리자새끼야 타이밍뒷.통수한방(1.213) 11.25 27 0
2904743 만화 드래곤볼 아직 못 봤는데 손오공 직업이 발명도둑잡기(118.216) 11.25 22 0
2904742 끙야참기 은근 쾌감?있는듯? ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 11.25 50 0
2904739 지귀연판사 말투 개웃기지않냐? [5] 헬마스터갤로그로 이동합니다. 11.25 71 0
2904735 한국에서 수준운운 의미없다. [6] 프갤러(110.8) 11.25 83 0
2904734 촉촉한 초코 케익처럼 달콤한 모모링❤ ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 11.25 29 0
2904733 앱히키는 창년임 ㅇㅇ(222.108) 11.25 66 0
2904730 요새 1인 개발이 유행임? ㅋㅋ [1] 프갤러(118.235) 11.25 107 3
2904729 국가부도사태 초읽기 대.재.명 [5] ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 11.25 106 1
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2