본문 바로가기

[Assembly] syscall table for x86_64 리눅스 64비트에서 어셈블리로 프로그래밍을 할때 각함수의 이름과 레지스터 사용법이다. syscall로 실행해야 한다. %raxSystem call%rdi%rsi%rdx%rcx%r8%r90sys_readunsigned int fdchar *bufsize_t count1sys_writeunsigned int fdconst char *bufsize_t count2sys_openconst char *filenameint flagsint mode3sys_closeunsigned int fd4sys_statconst char *filenamestruct stat *statbuf5sys_fstatunsigned int fdstruct stat *statbuf6sys_lstatfconst char *filenamest.. 더보기
[Assembly] syscall table for x86 리눅스에서 어셈블리로 컴파일을 할떄 system call number을 알아야 하는데 32비트에서는 int 0x80으로 실행을 한다.(여기서 int는 interrupt의 약자이다.) 이 system call number 가 정이되어 있는 곳은 \usr\include\asm\unistd.h 에 지정되어 있다. %eaxNameSource%ebx%ecx%edx%esx%edi1sys_exitkernel/exit.cint----2sys_forkarch/i386/kernel/process.cstruct pt_regs----3sys_readfs/read_write.cunsigned intchar *size_t--4sys_writefs/read_write.cunsigned intconst char *size_t--5s.. 더보기
[Assembly] 레지스터 개념 이외 64비트 범용 레지스터로는 rax ,rbx ,rcx ,rdx가 있다. 더보기
[Assembly] 실행환경 및 컴파일방법 어셈블리어 프로그래밍을 하기전에 자신의 컴퓨터 사양 및 컴파일러 등을 확인해야 한다. 어셈블리어 프로그래밍을 하기 앞서 저는 다음과 같은 실행환경에서 프로그래밍을 하고자 합니다. - cpu : 인텔계열(64bit)- 컴파일러 : nasm- 리눅스 : ubuntu 16.04 LTS NASM는 The Netwide Assembler의 약자입니다. 이 어셈블러는 여러 플랫폼사이에서의 포팅능력과 모듈화에 중점을 두고 개발되고 있는 32비트 및 64비트 지원하는 컴파일러입니다. 또한 가능한 간단하고 쉬운 문법을 사용합니다. 왜? NASM이냐는 NASM 튜토리얼에 있는 내용을 보면서 이해하도록 하겠습니다.우선, 무료 컴파일러이다. (2-clause BSD 혹은 simplified BSD 라이센스를 가지고 있다), .. 더보기