반응형
#include <stdio.h> int main() { printf("Hello World"); return 0; } .LC0: .string "Hello World" main: push rbp mov rbp, rsp mov edi, OFFSET FLAT:.LC0 mov eax, 0 call printf mov eax, 0 pop rbp ret
string에 출력할 문자열인 "Hello World"가 저장되어있는 모습이다.
push rbp를 통해 공간을 만들고,
printf 함수를 호출하여 "Hello World"가 출력된다.
#include <stdio.h> int main() { int n; scanf("%d", &n); printf("%d",n); } .LC0: .string "%d" main: push rbp mov rbp, rsp sub rsp, 16 lea rax, [rbp-4] mov rsi, rax mov edi, OFFSET FLAT:.LC0 mov eax, 0 call __isoc99_scanf mov eax, DWORD PTR [rbp-4] mov esi, eax mov edi, OFFSET FLAT:.LC0 mov eax, 0 call printf mov eax, 0 leave ret
이번엔 정수 a를 선언하고, 정수를 입력받고, 입력받은 정수를 출력하는 코드이다.
lea rax, [rbp-4]를 통해 정수(4바이트)크기만큼 공간을 확보해주는 모습이다.
그런 후 scanf함수를 호출하여 정수를 입력받아주고,
eax에 입력받은 정수가 있는 위치인 rbp-4의 주소값을 넣어준다.
그리고 eax를 printf 함수를 호출하여 출력시켜준다.
이런 모습은 정수가 아닌 문자값을 넣어줘도 크기만 다를 뿐 행동은 같다.
반응형