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 같은게 없으니 뭐 저렇게 나오는게 맞지