디시인사이드 갤러리

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

갤러리 본문 영역

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

나르시갤로그로 이동합니다. 2025.11.24 14:26:44
조회 51 추천 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 48763 65
2904506 린겨 ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 21:57 5 0
2904504 필독 노력갤로그로 이동합니다. 21:53 11 0
2904503 26학번 새내기들을 위한 입시 면접 합격 가이드(따뜻한 조언)!Y 프갤러(121.142) 21:47 13 1
2904501 와 개씨발 모기잇노 ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 21:37 8 0
2904500 대한민국 출산율 회생방안 ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 21:35 6 0
2904499 너, 재판 쌓여있잖아 ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 21:16 15 0
2904496 API 왤케 비쌈? ㅇㅇ갤로그로 이동합니다. 21:05 23 0
2904495 나님 누웅..✨ ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 21:04 13 0
2904490 ㄴㅏ씻주준⭐+ [2] ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 20:32 24 0
2904489 재롱둥이 친중재명 ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 20:27 12 0
2904484 오늘 숙면을 위해 모든 전자기기 전원 뽑고 자볼 예정임 [3] 가연아갤로그로 이동합니다. 19:39 41 0
2904482 문서작업이랑 테스트만 존나 하고있는데 퇴사할까? [5] ㅇㅇ(220.90) 19:15 47 0
2904480 형들 빡대가리는 코딩 포기해야할까요? [21] 썬콜맨갤로그로 이동합니다. 18:38 102 0
2904479 야 공익이면 군필적는게 낳냐 [5] ㅇㅇ갤로그로 이동합니다. 18:37 55 0
2904478 모모링 위험햇! [1] ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 18:33 34 0
2904477 예아 [5] 개멍청한유라갤로그로 이동합니다. 18:28 41 0
2904475 냥덩이.. 강해..? [6] ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 18:21 36 0
2904474 하루에 한번 앱히키 욕하기 프갤러(118.235) 17:21 23 0
2904471 ❤✨☀⭐⚡☘⛩☃나님 시작합니당☃⛩☘⚡⭐☀✨❤ [2] ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 17:01 42 0
2904470 프로그래밍 진짜 개 입문자 바로 플러터배워도됨? [6] ㅇㅇ(118.235) 16:55 67 0
2904468 퇴사할때 연차남으면 어떻게함? [3] ㅇㅇ(220.90) 16:35 45 0
2904467 lg dx school 진지하게 어떰?? [1] 프갤러(106.101) 16:14 44 0
2904464 Ada, Rust의 0 오버헤드 C 바인딩 [2] 나르시갤로그로 이동합니다. 15:30 39 0
2904463 서버 2u짜리 추천좀 [2] 프갤러(124.194) 15:26 29 0
2904461 아 존나 귀찮다. 요즘 회사들 왜케 깐깐하게 굶? [15] 프갤러(221.149) 14:37 135 1
2904460 LLVM IR 소개 (일종의 통합 가상 어셈블리) 나르시갤로그로 이동합니다. 14:34 31 0
사람이 어셈블리를 직접 작성하지 않고 LLVM IR을 작성 [5] 나르시갤로그로 이동합니다. 14:26 51 1
2904457 시발 ㅋㅋㅋㅋ [10] 루도그담당(58.233) 13:49 87 0
2904455 아 왜 에러가 나는거야 [9] 루도그담당(58.233) 13:39 77 0
2904453 안드로이드 공부 중인데 몇 가지 질문 및 피드백좀 [5] 프갤러(222.104) 13:34 50 0
2904452 대학교 1학년 프붕이 교양 교수랑 말다툼함 [16] ㅇㅇ(211.234) 13:05 113 0
2904451 앱히키 엄창년 프갤러(118.235) 13:01 33 1
2904450 아오 휴일인데 가까운데 갈만한 곳이 없네..ㅇㅅㅇ [3] ㅇㅅㅇ(106.102) 13:00 36 0
2904448 프갤은 참재밌어 [3] Meow갤로그로 이동합니다. 11:55 112 3
2904443 러스트 인생 40년 갈아넣었습니다... [3] 프갤러(223.63) 10:29 106 0
2904442 컴공 자퇴해야되나 [8] 프갤러(116.35) 10:18 145 0
2904440 기획자 전환 고민 있습니다 프갤러(58.151) 10:10 52 0
2904439 자바 인생 40 년 갈아 넣었습니다. [1] 프갤러(59.16) 10:09 72 0
2904438 C++ 인생 40 년 갈아 넣었습니다. 프갤러(59.16) 09:57 70 0
2904433 난 자바를 좋아하는데 [9] 슈퍼막코더(126.179) 09:02 96 0
2904431 중국 놈들이 여론조작하는 거 밝혀짐 [9] 프갤러(118.235) 08:42 2445 32
2904429 기술적인 얘기인척 하려해도 늘 같은 소리인거 같음 [5] ㅇㅇ갤로그로 이동합니다. 08:14 95 5
2904427 모바일 SDK 개발하는 팀은 어떤일해? [1] 프갤러(220.92) 07:37 41 0
2904426 cyber security능 끝물이공 버려진field잉 무토깽(218.149) 07:24 32 0
2904425 러스트는 GUI부터 제대로 제공해야 됨 [4] ㅇㅇ(114.30) 06:48 78 0
2904422 요즘은 관리잘하면 50초중까지는 꼴리는듯 ㅇㅇ(118.235) 06:25 50 0
2904421 인지과학조져라 손발이시립디다갤로그로 이동합니다. 06:13 64 0
2904420 발명도둑잡기 차단이 왜 풀려있냐? ㅇㅇ(114.30) 06:11 39 1
2904418 중국인 댓글부대 한국여론조작 포착 [2] ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 06:07 71 2
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2