카테고리

asm (27) bootloader_x86_grub (1) C (92) compile (11) config (76) CPP (13) CSS (1) debugging (7) gimp (1) Go (1) html (1) Java (1) JavaScript (1) kernel (19) LibreOffice (3) Linux system progamming (21) MFC (1) opencv (4) OpenGL (1) PHP (1) Python (4) qemu (29) shell (3) socket (7) troubleshooting (2) ubuntu18.04 (2) windows (1)

2018/12/06

asm 32bit write 함수 정의 후 호출

;시스템 인터럽트 write
;systeam call tables 검색

SECTION .data

msg: db "Asembly is freakin cool",10,0
msgLen: db 26

; msg:다른 코드 참조 레이블
; db:바이트 정의
; 10은 개형 문자 \n
: 0은 null 바이트

SECTION .bss

SECTION .text
global main ;외부 사용 가능

main:
push ebp
mov ebp, esp

;코드 작성 영역
; 시스템 호출 작성
; 정의: write(fileDescriptor, char* msgAddr, bytes)

 push DWORD [mesgLen]
 push msg
 call write

;스택 해재
mov esp, ebp
pop ebp
ret

write:
push ebp
mov ebp, esp

;코드 작성 영역
; 시스템 호출 작성
; 정의: write(fileDescriptor, char* msgAddr, bytes)

 mov ebx, 4
 mov ebx, 1 ;0=stdin 1=stdout 2=stderror
 mov ecx, [ebp + 8]
 mov edx, [ebp + 12]

 ;인터럽트 생성
 int 0x80


;compile
;nasm -f elf32 -o asm.o systemCalls.asm
;gcc -m32 -o program asm.o

댓글 없음:

댓글 쓰기