본문 바로가기

C언어/어셈블리어 변환

Assembly to C

section .data
    msg db "Result: %d", 0

section .text
    global main
    extern printf

main:
    push    rbp
    mov     ebp, esp

    mov     eax, 10
    mov     ebx, 4
    imul    eax, ebx

    mov     esi, eax
    mov     edi, msg
    xor     eax, eax
    call    printf

    mov     eax, 0
    leave
    ret

데이터 섹션

;출력할 문자열 정의하는데 %d는 정수 출력, 0은 문자열 끝을 표시하는 null terminator임

section .data
    msg db "Result: %d", 0

 

텍스트 섹션

section .text
    global main      ;전역 함수 선언
    extern printf    ;printf 함수 사용 선언

 

메인함수 시작

;스택 프레임 설정
main:
    push    rbp       ;현재 스택 프레임 저장
    mov     ebp, esp  ;새 스택 프레임 설정

 

변수 초기화 / 연산

    mov     eax, 10   ;eax에 10 저장
    mov     ebx, 4   ;ebx에 4 저장
    imul    eax, ebx  ;eax = eax * ebx

 

printf함수 실행

    mov     esi, eax  ;esi에 eax 저장
    mov     edi, msg  ;edi에 msg 주소 저장
    xor     eax, eax  ;eax 초기화 (printf 규약)
    call    printf  ;printf 호출

 

종료

    mov     eax, 0    ;정상 종료 코드 저장
    leave        ;스택 복원
    ret          ;함수 종료

C언어 변환 후

#include <stdio.h>

int main(void) {
    int a = 10;
    int b = 4;
    int result = a * b;

    printf("Result: %d", result);
    return 0;
}