본문 바로가기

컴퓨터 과학 & 영상처리 관련/Assembly (시스템 소프트웨어)

linux printf 이용한 NASM 예제

section .data

msg1 db "hello world %d", 10,0

 

section .text

extern printf   

 

global main

 

main:

push ebp

mov ebp, esp

sub esp, 10

 

push DWORD 2014    //esp 로부터 8 ? 4?

push DWORD msg1   //esp 로부터 4 ? 0?

call printf        //어쨌든 스택포인터로부터 가까운거부터 함수의 인자로 들어가는구나

 

mov esp, ebp

pop ebp

ret

 

 

 

---------------------------------------------------

nasm -f elf nasm_printf.asm

gcc -m32 -o nasm_printf nasm_printf.asm

./nasm_printf

 

hello world 2014

 

-------------------------------------------------------

 

section .data

msg1 db "hello world %d", 10,0

 

section .text

extern printf   

 

global main

 

main:

push ebp

mov ebp, esp

 

//int main(int argc, char** argv)

 

push DWORD [ebp + 8]   //argc

mov ebx, DWORD [ebp + 12]   //argv

push DWORD [ebx]

call printf      

 

mov esp, ebp

pop ebp

ret

------------------------

결과 : ./nasm_printf

첫번째 문자열에 %d 같은게 없으니 뭐 저렇게 나오는게 맞지