2Ju0
Ju0.log
2Ju0
전체 방문자
오늘
어제
  • 🐱‍🚀 모두보기 (32)
    • CS (18)
      • LLVM (11)
      • 운영체제 (1)
      • 보안 (3)
      • 프로그래밍언어 (0)
      • 데이터과학 (3)
    • PL (1)
      • Python (1)
      • JavaScript (0)
    • Algorithm (12)
      • Python (0)
      • Javascript (12)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

최근 댓글

최근 글

hELLO · Designed By 정상우.
2Ju0

Ju0.log

CS/LLVM

LLVM IR 비트코드 분석 - Variable(변수)

2022. 4. 1. 12:34

var.c

#include <stdio.h>

int global_var = 12;

int main(){
    int local_var;
    local_var = 14;
    return global_var;
}

var.ll

@global_var = dso_local global i32 12, align 4

; Function Attrs: noinline nounwind optnone uwtable
define dso_local i32 @main() #0 {
entry:
  %retval = alloca i32, align 4
  %local_var = alloca i32, align 4
  store i32 0, i32* %retval, align 4
  %0 = load i32, i32* @global_var, align 4
  ret i32 %0
}

- @: 전역 변수 (global variable)

- %: 지역 변수 (local variable)

​

1) global로 global_var이라는 전역 변수, 값 12, data 영역에 메모리 할당

​

2) alloca로 %retval 변수 스택 메모리 할당

3) alloca로 %local_var 지역 변수 스택 메모리 할당

4) %retval 할당한 주소에 값 0 저장

5) load로 전역 변수 global_var의 값을 가져와 임시변수 %0에 저장

6) %0 값 return


var2.c

#include <stdio.h>

int global_var = 12;

int main(){
    int local_var = 14;
    return global_var;
}

var2.ll

; Function Attrs: noinline nounwind optnone uwtable
define dso_local i32 @main() #0 {
entry:
  %retval = alloca i32, align 4
  %local_var = alloca i32, align 4
  store i32 0, i32* %retval, align 4
  store i32 14, i32* %local_var, align 4
  %0 = load i32, i32* @global_var, align 4
  ret i32 %0
}

1) global로 global_var이라는 전역 변수, 값 12, data 영역에 메모리 할당

 

2) alloca로 %retval 변수 스택 메모리 할당

3) alloca로 %local_var 지역 변수 스택 메모리 할당

4) %retval 할당한 주소에 값 0 저장

5) store로 로컬 변수 local_var 할당한 주소에 값 14 저장

6) load로 전역 변수 global_var의 값을 가져와 임시변수 %0에 저장

7) %0 값 return

    'CS/LLVM' 카테고리의 다른 글
    • LLVM IR 비트코드 분석 - Array(배열)
    • LLVM IR 비트코드 분석 - add(덧셈 연산)
    • LLVM Pass Practice
    • LLVM Skeleton Pass
    2Ju0
    2Ju0

    티스토리툴바