디시인사이드 갤러리

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

갤러리 본문 영역

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

나르시갤로그로 이동합니다. 2025.11.24 14:26:44
조회 110 추천 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 48771 65
2905032 '19' 젖제로투 추는 BJ.gif 프갤러(210.223) 02:11 0 0
2905031 '속보' 백종원 이혼 조정 성립 外 프갤러(175.124) 02:09 0 0
2905029 내 바탕화면 아무한테나 안보여주는데 보여줄게 ㅇㅇ(59.7) 02:08 4 0
2905027 위성 쏘는 이유가 나오는 영화 <에너미 오브 더스테이츠> [1] 발명도둑잡기(118.216) 01:59 9 0
2905025 국내에 외국계 기업 특 ) 짱깨랑 양키랑 좇본 인도 대기업들 몰렸는데 타이밍뒷.통수한방(1.213) 01:54 10 0
2905023 윤도현-타잔 발명도둑잡기(118.216) 01:47 5 0
2905022 위성 싸서 좋은점은 짱깨들밖에없잖누 ㅋㅋㅋㅋㅋ 타이밍뒷.통수한방(1.213) 01:41 13 0
2905021 위성 쏘는 이유 중 하나가 야당 감시다 발명도둑잡기(118.216) 01:33 8 0
2905017 내일 또 클리앙새끼를 누리호 ㅇㅈㄹ하면서 난리치겠누 [1] 타이밍뒷.통수한방(1.213) 01:23 16 0
2905015 냥덩이 잡아다가 누리호에 묶어서 쏴올렸다는데? 발명도둑잡기(118.216) 01:17 8 0
2905014 누리호 궤도 진입 성공 대 실패 예상 댓글좀 발명도둑잡기(118.216) 01:09 10 0
2905013 오늘의 영상 기획 실마리: 작품 발표를 로케트 발사처럼 패러디 발명도둑잡기(118.216) 00:58 11 0
2905010 조선이 위성을 쏘아도 한국은 도발이라고 표현하는데 발명도둑잡기(118.216) 00:31 13 0
2905009 법무부 영문 표기가 Ministry of Justice 발명도둑잡기(118.216) 00:14 8 0
2905008 DB 검색할 때 %like%는 걍 없다고 생각하고 써야함? [1] 프갤러(58.29) 00:14 14 0
2905007 새벽 1시 핫딜... 당신은 잠만 잤습니다 프갤러(117.111) 00:01 23 0
2905006 이거 항소하면 무죄 내지는 벌금50까지 줄여지냐? 씨발국가야? ㅇㅇ(39.7) 11.26 24 0
2905005 대통령보다 연봉높은 우주청 현실 [1] 타이밍뒷.통수한방(1.213) 11.26 32 0
2905004 개인 자격으로 인공위성 만들어 발사한 미디어아티스트 송호준 [1] 발명도둑잡기(118.216) 11.26 13 0
2905003 해외기사들보면 삼성 lg제품 존나 광고하네 타이밍뒷.통수한방(1.213) 11.26 19 0
2905002 소프트웨어 엔지니어의 몰입 손발이시립디다갤로그로 이동합니다. 11.26 20 0
2905001 [공식] 누리호 4차 발사 현장 생중계 발명도둑잡기(118.216) 11.26 10 0
2905000 이거 ㅈㄴ 억울한데 항소할지 걍 벌받을지 추천좀 [1] ㅇㅇ(39.7) 11.26 25 0
2904999 슬슬 재취업들어가야겠군 ㅇㅇ(113.59) 11.26 19 0
2904998 R이나 파이썬같은 툴 돌릴 때 작동 원리에 대한 수학 ㅇㅇ(211.108) 11.26 15 0
2904997 음악인 나오는 영화 추천 <꿈의 제인> 발명도둑잡기(118.216) 11.26 14 0
2904994 충격적임.. ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 11.26 22 0
2904992 밤하늘 별빛이 호롱불 같구낭 ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 11.26 21 0
2904988 Wendy & Lisa-The Closing Of the Year 발명도둑잡기(118.216) 11.26 8 0
2904986 회사에서 AI 써야하는 이유가 있음 박민준갤로그로 이동합니다. 11.26 34 0
2904984 33살 인생 평가좀.. 진지함 정말이야, 절박해 [1] ㅇㅇ(39.7) 11.26 32 0
2904982 [발언대] ‘2인 선거구’ 없애야 민심 제대로 반영된다 발명도둑잡기(118.216) 11.26 10 0
2904981 Ada의 case when 최적화와 errno → 예외 매핑 나르시갤로그로 이동합니다. 11.26 12 0
2904979 무슨 맛으로 먹을까 떡볶이 인데 망했다. [1] 넥도리아(220.74) 11.26 24 0
2904976 통합 에러 핸들러와 이진 탐색 최적화 나르시갤로그로 이동합니다. 11.26 18 0
2904975 나님 주무십니당⭐+ ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 11.26 12 0
2904974 Go 쓰자 박민준갤로그로 이동합니다. 11.26 31 0
2904973 악플러 멍유 제발 일본에서 조난.. [4] ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 11.26 48 0
2904972 나님 누엇어양✨ ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 11.26 22 0
2904970 뉴비들을 위한 입시 면접 합격 가이드(따뜻한 조언)!M 프갤러(121.142) 11.26 23 1
2904969 누리호 발사 기원 우주 플레이리스트 발명도둑잡기(118.216) 11.26 17 0
2904966 나씻주준⭐+ [1] ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 11.26 36 0
2904964 일본 취업 유학 워홀 여행 관련모임 ㅇㅇ(106.146) 11.26 27 0
2904963 27일 27번 타자가 친 공처럼 로케트 잘 올라갈까? 발명도둑잡기(118.216) 11.26 19 0
2904962 <UDT 우리동네 특공대>가 인기래서 생각나는 예전 글 [1] 발명도둑잡기(118.216) 11.26 27 0
2904961 C API를 위한 고성능 예외-에러코드(errcode) 매핑 전략 나르시갤로그로 이동합니다. 11.26 38 0
2904960 엣지 탭 천개쯤 띄우면 다 [1] 발명도둑잡기(118.216) 11.26 24 0
2904959 왜 갑자기 쌍ㅅ쌍 얘기야? 나르시갤로그로 이동합니다. 11.26 31 2
2904958 Clair 라이브러리: Ada 예외를 C API로 매핑하기 나르시갤로그로 이동합니다. 11.26 21 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2