디시인사이드 갤러리

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

갤러리 본문 영역

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

나르시갤로그로 이동합니다. 2025.11.24 14:26:44
조회 104 추천 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 - -
2904856 당신이 아는 빅뱅은 틀렸다 발명도둑잡기(118.216) 03:19 28 0
2904849 위시캣이란 만화가 있나보네 발명도둑잡기(118.216) 02:58 23 0
2904847 X윈도우 프로그래밍 갤러리 개설 [2] FreePascal갤로그로 이동합니다. 02:55 59 0
2904846 "SM 이수만 파워 통했다" 이달의 소녀, '해시' 아이튠즈 발명도둑잡기(118.216) 02:27 22 0
2904844 레스토랑 메뉴판에 숨은 꼼수들 발명도둑잡기(118.216) 02:16 27 0
2904843 전처리 친구들을 그려봤어요 [2] ㅇㅇ(1.247) 02:13 84 1
2904842 환율 진짜 개 에바다. Move갤로그로 이동합니다. 02:11 56 0
2904840 const는 상수 아니냐? [3] ㅇㅇ갤로그로 이동합니다. 01:49 67 0
2904839 아 걍 취업하지 말고 농사나 지을까 [4] 프갤러(121.152) 01:45 66 0
2904838 퇴직하고 나니까 드는 생각인데 주 3일제 해야한다. [5] 프갤러(110.8) 01:45 65 0
2904837 진보당 뽑으면 주4일제 된다 발명도둑잡기(118.216) 01:35 27 0
2904836 크레마 루팅 검색하다가 이 블로그가 나왔는데 [1] 발명도둑잡기(118.216) 01:34 33 0
2904835 출근하기싫다 [4] 노력갤로그로 이동합니다. 01:27 49 0
2904834 책사풍후 난중일기 책사풍후갤로그로 이동합니다. 01:26 24 0
2904833 백수라 가난 때문에 고민이 많다 발명도둑잡기(118.216) 01:23 33 0
2904831 나는 8년쯤전 영화 '슈퍼사이즈미' 보고 햄버거 끊었다 발명도둑잡기(118.216) 01:21 24 0
2904828 크레마 전자책 단종됐는데 발명도둑잡기(118.216) 01:16 28 0
2904827 내일부터 버거킹 대신 라면 먹어야겠다. 프갤러(110.8) 01:12 29 0
2904826 이제 슬슬 대가리 깨지지? RyuDOG갤로그로 이동합니다. 01:11 85 0
2904824 결국 내 말중 틀린게 없잖아 [5] RyuDOG갤로그로 이동합니다. 01:09 95 1
2904823 광장시장 바가지를 욕하지만 엔비디아 지피유 독과점 바가지는 침묵 발명도둑잡기(118.216) 01:08 23 0
2904819 법원행정처, '법정 모욕' 극우 변호사들 고발‥"법치주의 훼손" 발명도둑잡기(118.216) 00:59 23 0
2904818 후 남의 돈 날로 처먹고 싶다. [5] 프갤러(110.8) 00:56 56 0
2904817 Hello world도 모르는 컴맹인데 이거 ai가 앰뒤진거임? 라그네파갤로그로 이동합니다. 00:54 44 0
2904816 "대만 문제 이해한다고"…트럼프가? 일본 난처해진 상황 발명도둑잡기(118.216) 00:54 35 0
2904814 냥덩이도 발명도둑잡기(118.216) 00:44 28 0
2904813 그 세글자 닉 우울증갤러리 출신이잖아 [4] 프갤러(106.101) 00:40 63 2
2904810 계속 진화하는 고급 아파트 커뮤니티 시설 발명도둑잡기(118.216) 00:31 20 0
2904808 ‘범죄도시 마동석’ 실제 모델 경찰관, 음주운전 적발 발명도둑잡기(118.216) 00:18 24 0
2904807 취업이 막히던 날, 릴스 하나가 길이 됐다… 종구형님의 인생 2막 발명도둑잡기(118.216) 00:15 59 0
2904805 Elite: "The game that couldn't be writte 발명도둑잡기(118.216) 11.25 28 0
2904804 싱클레어 ZX81 게임 발명도둑잡기(118.216) 11.25 27 0
2904803 삶이 점점 퍽퍽해지네 환경의 영향이란 [1] RyuDOG갤로그로 이동합니다. 11.25 88 1
2904802 니혼고 구다사이~ [8] 개멍청한유라갤로그로 이동합니다. 11.25 73 0
2904800 google 이 진성 홍어새끼들 타이밍뒷.통수한방(1.213) 11.25 30 0
2904799 나 쫒아다니면서 글쓰는건 정체가 뭐냐 프갤러(59.8) 11.25 24 0
2904797 보답으로 나도 주식추천해준다 [1] 프갤러(59.8) 11.25 41 0
2904792 나사도 감탄했다는 조선의 천재 왕 [1] 발명도둑잡기(118.216) 11.25 42 1
2904790 인텔=구글=애플=엔비디아=팔란티어=공공기관=CIA=FBI=NSA 발명도둑잡기(118.216) 11.25 24 0
2904789 나 요즘에 입에 손넣고 침흘려 [3] 재현갤로그로 이동합니다. 11.25 68 0
2904788 도둑이 많아지는 시대 특징 발명도둑잡기(118.216) 11.25 82 0
2904787 나만 잘되면 되는거야. 재현갤로그로 이동합니다. 11.25 27 0
2904784 나좀 살려주라 똥지렸는데... [3] 넥도리아(223.38) 11.25 44 1
2904783 해킹당하는중인데 어떡함? [12] 프갤러(59.8) 11.25 103 0
2904781 뉴비들을 위한 입시 면접 합격 가이드(따뜻한 조언)!= 프갤러(121.142) 11.25 43 1
2904780 인텔 다시 분리형 칩으로 돌아간것 같넹;; [2] ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 11.25 55 0
2904774 위험한 냥덩이 발명도둑잡기(118.216) 11.25 44 1
2904771 씨언어나 해라 [1] CANON갤로그로 이동합니다. 11.25 53 0
2904768 내란무새 찢재명 ㅋㅅㅋ ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 11.25 32 0
2904767 ☀+ 짧아지니 나님 빨리 주무시게 되는듯 ⭐+ [8] ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 11.25 76 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2