
CPU는 실행할 명령어와 명령어 처리에 필요한 데이터를 메모리에서 읽고, Instruction Set Architecture(ISA)에따라 이를 처리 후 연산의 결과를 다시 메모리에 적재하므로 CPU와 메모리 사이에 밀접한 연관이 있음만약 공격자가 메모리를 악의적으로

x86 문법 구조 = 명령어(동사) + 피연산자(목적어) = Opcode + operand데이터 이동: mov dst, src/lea dst, src산술 연산: add, sub, inc, dec논리 연산: and, or, xor, neg의 비트 연산비교 연산: cmp-

문제: https://dreamhack.io/learn/quiz/17dl <- 0x400000 1바이트0x400000 xor 0x300x400000 <- xor 계산값 1바이트rcx++rcx 0x19랑 비교해서rcx가 더 크면 end로 점프아니면 1
문제: https://dreamhack.io/learn/quiz/25 main: 함수 프롤로그 과정 esi=0xf rdi=0x400500 write_n 호출 write_n: 함수 프롤로그 과정 rbp-0x8 8바이트 참조=0x400500(0x3037207964343

함수 호출 과정함수 호출 규약이 아키텍처, 컴파일러 환경에 따라 달라짐 1\. 인자 전달 - 먼저 레지스터에 저장하고, 부족하면 스택에 저장 2\. return 주소 저장 - call func 함수 호출 다음 수행할 명령어의 주소(return 주소)를 스택에 push

gate > gremlingremlin.c 코드를 보면 buffer에 256byte가 할당되어 있음을 알 수 있음. argv1이 256byte보다 크면 BOF가 발생할 것. strcpy 함수 때문.공격 시나리오: 인자로 쉘코드를 전달해 buffer에 쉘코드 저장. 쉘코