Opcode: 스택🧱 [예제][Register]rsp = 0x7fffffffc400[Stack]0x7fffffffc400 | 0x0 [결과][Register]rsp = 0x7fffffffc3f8[Stack]0x7fffffffc3f8 | 0x31337 [예제][Register]rax = 0rsp = 0x7fffffffc3f8[Stack]0x7fffffffc3f8 | 0x31337 [결과][Register]rax = 0x31337rsp = 0x7fffffffc400[Stack]0x7fffffffc400 | 0x0 Opcode: 프로시저📜 컴퓨터 과학에서 프로시저(Procedure)는 특정 기능을 수행하는 코드 조각을 말한다. 프로시저를 사용하면 반복되는 연산을 프로시저 호출로 대체할 수 ..
x86-64 어셈블리 명령 구성: 명령어 + 피연산자 피연산자에는 총 3가지 종류가 올 수 있다.상수(Immediate Value)레지스터(Register)메모리(Memory) 1. 데이터 이동 🚚: mov (값), lea(주소) 2. 산술연산 ❌ 3. 논리연산 🤔 - and & or논리 연산 명령어는 and, or, xor, neg 등의 비트 연산을 지시한다. 이 연산은 비트 단위로 이루어 진다. and dst, src: dst와 src의 비트가 모두 1이면 1, 아니면 0[Register]eax = 0xffff0000ebx = 0xcafebabe[Code]and eax, ebx[Result]eax = 0xcafe0000 or dst, src: dst와 src의 비트 중 하나라도 1이면 1, 아니..
레지스터 RAX(64 bits) - EAX (32 bits, Extended AX) - AX(16 bits) - AL(8 bits) - AH(8 bits) rax = 0x0123456789abcdef 일때eax = 0x89abcdefah = 0x89abal = 0xcdef 리눅스 메모리 구조 리눅스에서는 프로세스의 메모리를 크게 5가지의 세그먼트(Segment) 로 구분한다. 여기서 세그먼트란 적재되는 데이터의 용도별로 메모리의 구획을 나눈 것인데,크게 코드 세그먼트, 데이터 세그먼트, BSS 세그먼트, 힙 세그먼트, 그리고 스택 세그먼트로 구분한다. 운영체제가 메모리를 용도별로 나누면, 각 용도에 맞게 적절한 권한을 부여할 수 있다는 장점이 있다.권한은 읽기, 쓰기, 그리고 실행이 존재하며, CPU는 ..