디시인사이드 갤러리

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

갤러리 본문 영역

사람이 어셈블리를 직접 작성하지 않고 LLVM IR을 작성

나르시갤로그로 이동합니다. 2025.11.24 14:26:44
조회 92 추천 1 댓글 5

? 사람이 어셈블리를 직접 작성하지 않고 LLVM IR을 작성하는 경우

저수준 프로그래밍을 하다 보면 CPU 아키텍처에 맞는 어셈블리 코드를 직접 작성해야 할 때가 있습니다. 하지만 어셈블리는 아키텍처마다 문법과 규약이 달라서 배우기도 어렵고 유지보수도 힘듭니다. 

이때 대안으로 사용할 수 있는 것이 바로 LLVM IR(Intermediate Representation)입니다. LLVM IR은 사람이 직접 작성할 수 있는 플랫폼 독립적인 가상 어셈블리로, LLVM 도구 체인을 통해 원하는 아키텍처의 어셈블리 코드로 변환할 수 있습니다. 


?+ 예시: IR 작성 → 어셈블리 생성

예를 들어, 두 정수를 곱하는 함수를 직접 IR로 작성한다고 해봅시다.

; mul.ll
define i32 @mul(i32 %x, i32 %y) {
entry:
  %prod = mul i32 %x, %y
  ret i32 %prod
}

이제 이 IR 파일을 LLVM 도구로 변환하면:

  1. IR → 어셈블리(.s): bash llc mul.ll -o mul.s

  2. 어셈블리 → 실행 파일: bash clang mul.s -o mul


?+ 결과: x86-64 어셈블리 코드

LLVM이 자동으로 생성한 어셈블리(mul.s)는 대략 다음과 같습니다:

mul:
    imul    edi, esi    ; x * y
    mov     eax, edi    ; 결과를 eax에 저장
    ret

📝 특정 주소를 직접 다루는 경우

LLVM IR은 단순한 연산뿐 아니라 특정 메모리 주소를 직접 접근하는 것도 가능합니다.
예를 들어, 0x1000 주소에 있는 값을 읽고 쓰고 싶다면 다음과 같이 작성할 수 있습니다:

; addr.ll
define i32 @read_addr() {
entry:
; 0x1000은 십진수로 4096입니다.
  %ptr = inttoptr i64 4096 to i32*   ; 0x1000 주소를 i32* 포인터로 변환
  %val = load i32, i32* %ptr         ; 해당 주소에서 값 읽기
  ret i32 %val
}

define void @write_addr(i32 %x) {
entry:
  %ptr = inttoptr i64 4096 to i32*   ; 0x1000 주소를 i32* 포인터로 변환
  store i32 %x, i32* %ptr            ; 해당 주소에 값 쓰기
  ret void
}

이 IR을 컴파일하면 LLVM이 자동으로 해당 아키텍처에 맞는 어셈블리 명령어(mov, load, store 등)를 생성합니다. 

⚠+ 단, 이런 방식은 운영체제와 하드웨어 환경에 따라 동작이 달라질 수 있으며, 잘못된 주소를 접근하면 segfault가 발생할 수 있습니다. 따라서 일반적인 애플리케이션보다는 드라이버 개발, 메모리 맵 I/O 같은 특수한 상황에서만 사용됩니다. 


📌 장점

  • 플랫폼 독립성: IR은 특정 CPU에 종속되지 않으므로, 같은 IR을 ARM, RISC-V 등 다른 아키텍처용 어셈블리로도 변환할 수 있습니다.
  • 생산성: 사람이 직접 복잡한 어셈블리를 작성하지 않고, 상대적으로 단순한 IR을 작성하면 됩니다.
  • 확장성: IR은 최적화 패스를 거쳐 더 효율적인 코드로 변환될 수 있습니다.
  • 저수준 제어: 필요하다면 특정 주소를 직접 다루는 저수준 작업도 IR로 표현할 수 있습니다.

💬 마무리

즉, 사람이 직접 어셈블리를 작성하지 않고 IR을 작성하는 방식은 저수준 제어가 필요하지만 아키텍처별 어셈블리 문법에 얽매이고 싶지 않을 때 매우 유용합니다. LLVM이 알아서 해당 아키텍처에 맞는 어셈블리를 생성해 주기 때문에, 개발자는 IR만 작성하면 됩니다. 

👉 여러분은 직접 IR을 작성해서 어셈블리를 생성해본 경험이 있으신가요?
👉 혹은 특정 주소를 직접 다루는 저수준 작업을 IR로 표현해본 적 있으신가요? 


이 글은 MS 코파일럿 스마트 GPT로 생산한 글입니다.

추천 비추천

1

고정닉 1

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 뛰어난 운동 신경으로 남자와 싸워도 이길 것 같은 여자 스타는? 운영자 25/11/24 - -
이슈 [디시人터뷰] 충무로가 주목하는 신예, '세계의 주인' 서수빈 운영자 25/11/24 - -
AD 대학생 필수템! What's in my Bag 운영자 25/11/21 - -
공지 프로그래밍 갤러리 이용 안내 [97] 운영자 20.09.28 48767 65
2904805 Elite: "The game that couldn't be writte 발명도둑잡기(118.216) 11.25 9 0
2904804 싱클레어 ZX81 게임 발명도둑잡기(118.216) 11.25 9 0
2904803 삶이 점점 퍽퍽해지네 환경의 영향이란 RyuDOG갤로그로 이동합니다. 11.25 25 0
2904802 니혼고 구다사이~ [6] 개멍청한유라갤로그로 이동합니다. 11.25 16 0
2904800 google 이 진성 홍어새끼들 타이밍뒷.통수한방(1.213) 11.25 11 0
2904799 나 쫒아다니면서 글쓰는건 정체가 뭐냐 프갤러(59.8) 11.25 11 0
2904797 보답으로 나도 주식추천해준다 [1] 프갤러(59.8) 11.25 16 0
2904792 나사도 감탄했다는 조선의 천재 왕 [1] 발명도둑잡기(118.216) 11.25 21 1
2904790 인텔=구글=애플=엔비디아=팔란티어=공공기관=CIA=FBI=NSA 발명도둑잡기(118.216) 11.25 13 0
2904789 나 요즘에 입에 손넣고 침흘려 [2] 재현갤로그로 이동합니다. 11.25 33 0
2904788 도둑이 많아지는 시대 특징 발명도둑잡기(118.216) 11.25 26 0
2904787 나만 잘되면 되는거야. 재현갤로그로 이동합니다. 11.25 20 0
2904784 나좀 살려주라 똥지렸는데... [3] 넥도리아(223.38) 11.25 24 1
2904783 해킹당하는중인데 어떡함? [12] 프갤러(59.8) 11.25 64 0
2904781 뉴비들을 위한 입시 면접 합격 가이드(따뜻한 조언)!= 프갤러(121.142) 11.25 22 1
2904780 인텔 다시 분리형 칩으로 돌아간것 같넹;; [1] ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 11.25 33 0
2904774 위험한 냥덩이 발명도둑잡기(118.216) 11.25 26 1
2904771 씨언어나 해라 [1] CANON갤로그로 이동합니다. 11.25 32 0
2904768 내란무새 찢재명 ㅋㅅㅋ ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 11.25 23 0
2904767 ☀+ 짧아지니 나님 빨리 주무시게 되는듯 ⭐+ [6] ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 11.25 43 0
2904760 Skia: C 스타일 API와 모던 C++의 절묘한 조합 [4] 나르시갤로그로 이동합니다. 11.25 38 0
2904759 C++, Rust, Ada 라이브러리를 다른 언어에서 사용하려면? 나르시갤로그로 이동합니다. 11.25 21 0
2904758 환율 떡락과 일본 지진으로 보건대 [3] 프갤러(49.165) 11.25 33 0
2904757 Rust와 C FFI에서 패닉 전파에 대한 정리 나르시갤로그로 이동합니다. 11.25 20 0
2904756 삼성 컴퓨터 광고 발명도둑잡기(118.216) 11.25 35 0
2904755 여름에 남겨놓은 아이스크림이 하나 있었던 듯 발명도둑잡기(118.216) 11.25 12 0
2904754 요새 만원이면 알리에서 리눅스 지원 싱글보드를 산다 [6] 발명도둑잡기(118.216) 11.25 34 0
2904753 고철 발명도둑잡기(118.216) 11.25 15 0
2904751 유튜브 숏츠 만드는 새끼들 나님꺼 자꾸 막 갔다쓰네 [3] ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 11.25 44 0
2904750 IT업계 근황 발명도둑잡기(118.216) 11.25 65 0
2904749 웹페이지 만듦 프갤러(159.26) 11.25 23 0
2904747 ❤✨☀⭐⚡☘⛩☃나님 시작합니당☃⛩☘⚡⭐☀✨❤ ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 11.25 19 0
2904746 vga32 ttgo MSX 에뮬레이터 발명도둑잡기(118.216) 11.25 15 0
2904745 pico-286 발명도둑잡기(118.216) 11.25 14 0
2904744 노인비하글 써서 프갤 하루 글 차단했냐 관리자새끼야 타이밍뒷.통수한방(1.213) 11.25 18 0
2904743 만화 드래곤볼 아직 못 봤는데 손오공 직업이 발명도둑잡기(118.216) 11.25 15 0
2904742 끙야참기 은근 쾌감?있는듯? ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 11.25 38 0
2904739 지귀연판사 말투 개웃기지않냐? [5] 헬마스터갤로그로 이동합니다. 11.25 42 0
2904735 한국에서 수준운운 의미없다. [6] 프갤러(110.8) 11.25 62 0
2904734 촉촉한 초코 케익처럼 달콤한 모모링❤ ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 11.25 16 0
2904733 앱히키는 창년임 ㅇㅇ(222.108) 11.25 39 0
2904731 [애니뉴스] Github Page 사이트 주소 1급시크릿공문(121.172) 11.25 27 0
2904730 요새 1인 개발이 유행임? ㅋㅋ [1] 프갤러(118.235) 11.25 81 3
2904729 국가부도사태 초읽기 대.재.명 [5] ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 11.25 75 1
2904727 식당 들어갔는데 알바생이 젊고 예쁨 [3] ㅁㅁㅅ갤로그로 이동합니다. 11.25 56 0
2904725 실력자의 기준이 뭐냐? [7] 프갤러(211.240) 11.25 91 0
2904723 [대한민국 + 애니뉴스] 부정선거와 내부총질의 상관관계 1급시크릿공문(121.172) 11.25 21 1
2904720 전남친토스트맛 [3] 넥도리아(223.38) 11.25 30 0
2904718 달력받으러 신한은행 넥도리아(223.38) 11.25 25 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2