디시인사이드 갤러리

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

갤러리 본문 영역

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

나르시갤로그로 이동합니다. 2025.11.24 14:26:44
조회 155 추천 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/12/01 - -
AD 루틴 ON! 운동 찐템! 지금 할인 중 운영자 25/11/27 - -
2906074 인지과학조져라 손발이시립디다갤로그로 이동합니다. 12.02 74 0
2906073 그냥 말하는거 딱 들어보면 알어 ㅇㅇ갤로그로 이동합니다. 12.02 148 0
2906070 ??? ㅇㅅㅇ [4] 헤르 미온느갤로그로 이동합니다. 12.02 98 0
2906069 GPT 나온 뒤로 해킹이 많아진듯 프갤러(223.194) 12.02 100 0
2906068 쿠팡은 안 망해 다른 곳도 보안이슈 터지겠지 [1] ㅇㅇ(114.30) 12.02 89 0
2906064 오리 ㅇㅅㅇ [1] 헤르 미온느갤로그로 이동합니다. 12.02 90 0
2906061 태연 ㅇㅅㅇ 헤르 미온느갤로그로 이동합니다. 12.02 70 0
2906060 하루 한 번 헤르미온느 찬양 헤르 미온느갤로그로 이동합니다. 12.02 87 0
2906059 쿠팡 불매 어느정도로 될까? ㅇㅅㅇ [1] 헤르 미온느갤로그로 이동합니다. 12.02 91 0
2906057 php가 그렇게 병신같은 언어임? [1] ㅇㅇ(125.137) 12.02 109 0
2906050 물가 올라서 만들오봄 오잉(118.235) 12.02 96 0
2906045 전세계 간첩들 제일살기좋고 바쁜시대여 ㅋㅋㅋㅋ 타이밍뒷.통수한방(1.213) 12.02 89 1
2906043 해커톤상금좀털러가볼까 따당갤로그로 이동합니다. 12.02 98 0
2906041 한국 개발자 평균 수준이 이미 중국 밑입니다. 프갤러(110.8) 12.02 130 1
2906031 얘들아 고마웠다 [1] ㅇㅇ(118.235) 12.02 96 0
2906032 재활용 분리수거 질문드려요. 넥도리아(220.74) 12.02 71 0
2906028 나노바나나 [1] ㅇㅇ갤로그로 이동합니다. 12.02 90 0
2906011 인정욕구의 개념을 잘못 알던 헬마스터 병신새끼는 프갤러(211.36) 12.01 81 0
2905997 음기 충전 발명도둑잡기(39.7) 12.01 103 0
2905992 중국인이 몸값 ㅈㄴ싼데 일은 잘해 ㅇㅇ(221.168) 12.01 98 0
2905989 나르시야 github갤에 가라 거기 웹쟁이좀 패라 [1] 프갤러(61.75) 12.01 85 0
2905988 쿠팡 해킹범 짱깨라며 어째 해킹범 욕하는 기관이 하나도 없냐 ㅋㅋ [6] ㅇㅇ(124.48) 12.01 143 1
2905987 홍콩 무협과 힙합 발명도둑잡기(39.7) 12.01 52 0
2905983 오로지 연봉 때문에 이직하는경우 있음? [20] ㅇㅇ(221.168) 12.01 161 0
2905979 날아다니는 스파게티 괴물 발명도둑잡기(39.7) 12.01 58 0
2905976 해킹 피해자가 아니라 가해자였던 결혼정보업체 발명도둑잡기(39.7) 12.01 68 0
2905974 소액 알바 하다가 스파이가 된 이야기 발명도둑잡기(39.7) 12.01 64 0
2905968 경찰 “쿠팡 개인정보 유출, 기업 보안사고 넘어 국민 발명도둑잡기(39.7) 12.01 60 0
2905961 [애니뉴스] YxD Ads 개발중 ㅇㅇ(121.172) 12.01 61 0
2905959 llm이 자꾸 인증방식을 jwt로 몰아가네 [2] 프갤러(221.149) 12.01 101 0
2905957 [애니뉴스] YxD Labs 검색 버튼 추가 ㅇㅇ(121.172) 12.01 55 0
2905946 디지털 소유권 환상론으로 유튜브, 스테이블코인도 증발할 수 있다 발명도둑잡기(39.7) 12.01 75 0
2905942 현실에 나타난 아카자.jpg ㅁㅁㅅ갤로그로 이동합니다. 12.01 119 0
2905941 점심 간식 저녁 발명도둑잡기(39.7) 12.01 56 0
2905938 우왓, 연회중에 피분수가..ㅡㅡ;; [1] 박정희대통령갤로그로 이동합니다. 12.01 83 1
2905937 "'트럼프시대 美활동' 중국계 연구자, 문화대혁명 같은 혼란 중" 발명도둑잡기(39.7) 12.01 58 0
2905935 [단독] 정부, 쿠팡에 최대 1조3300억 과징금 … 국민 정보 통째 유 발명도둑잡기(39.7) 12.01 73 0
2905934 난 정치에 관심은 없지만 [2] 사람낚는어부갤로그로 이동합니다. 12.01 145 1
2905933 열혈 백업 중..ㅇㅅㅇ [7] 헤르 미온느갤로그로 이동합니다. 12.01 95 0
2905932 WPF 쓰면 쓸수록 역하네 이거 [6] 거북이속이거북갤로그로 이동합니다. 12.01 136 0
2905929 친중도 나쁘지 않은 듯 ㅇㅇ(114.30) 12.01 82 0
2905928 내일 그만둔다고 해야지 [2] ㅇㅇ(118.235) 12.01 109 0
2905927 책읽기 귀찮다 [1] 사람낚는어부갤로그로 이동합니다. 12.01 126 0
2905926 [대한민국] 윤석열 대통령 - 연성 메시지 계엄 강조 ㅇㅇ(121.172) 12.01 63 1
2905925 네카라쿠베 쿠팡 가려면 중국인 되야 한다네 [1] 발명도둑잡기(39.7) 12.01 96 0
2905924 진보정당 역사의 6가지 교훈과 재구성의 길 발명도둑잡기(39.7) 12.01 59 0
2905922 안녕하세요. 프갤러(125.177) 12.01 53 0
2905920 팀프로젝트 말고 1인 프로젝트만 교육시켜주는 프로그램은 없음? [1] 프갤러(221.166) 12.01 58 0
2905918 국정원 존재이유가 감시통제아님??하는일이 타이밍뒷.통수한방(1.213) 12.01 56 0
2905917 "쿠팡 IT 인력 절반 이상 중국인"…내부 폭로에 '발칵' 발명도둑잡기(211.246) 12.01 67 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2