Quiz: x86 Assembly 2
문제: 다음 어셈블리 코드를 실행했을 때 출력되는 결과로 올바른 것은? [Code] main: push rbp mov rbp, rsp mov esi, 0xf mov rdi, 0x400500 call 0x400497 mov eax, 0x0 pop rbp ret write_n: push rbp mov rbp, rsp mov QWORD PTR [rbp-0x8],rdi mov DWORD PTR [rbp-0xc],esi xor rdx, rdx mov edx, DWORD PTR [rbp-0xc] mov rsi,QWORD PTR [rbp-0x8] mov rdi, 0x1 mov rax, 0x1 syscall pop rbp ret ================================== [Memory] 0x4005..
Background: x86 Assembly Essential Part(1) 어셈블리 명령어
어셈블리어 기본 구조 어셈블리어는 명령어와 피연산자로 이루어져 있다. 주로 어셈블리어의 형식은 [명령어] [피연산자]이다. 주요 명령어는 다음과 같다 데이터 이동(Data Transfer) mov, lea 산술 연산(Arithmetic) inc, dec, add, sub 논리 연산(Logical) and, or, xor, not 비교(Comparison) cmp, test 분기(Branch) jmp, je, jg 스택(Stack) push, pop 프로시져(Procedure) call, ret, leave 시스템 콜(System call) syscall 피연산자에는 상수, 레지스터, 또는 메모리가 올 수 있다. 메모리 피연산자는 []로 둘러싸인 것으로 표현되며, "TYPE" PTR [주소] 와 같이 표현..
Quiz: Computer Architecture
Quiz 1, 2, 3, 4: rax = 0x0123456789abcdef 일 때, al ah, eax, ax 값은? 풀이: rax는 64비트 크기로, eax는 rax의 하위 32비트를 가리키며, ax는 rax의 하위 16비트이다. ax의 하위 분류에 속하는 ah와 al 중 ah는 ax의 상위 8비트, al은 ax의 하위 8비트이다. 따라서, al == 0xef ah == 0xcd ax == 0xcdef eax == 0x89abcdef 이다. Quiz 5: rax에서 rbx를 뺐을 때, ZF가 설정되었다. rax와 rbx의 대소를 비교하시오. 풀이: ZF(Zero Flag)는 연산의 결과가 0일 때 설정된다. 따라서 rax==rbx이다