Assembly

    [Dreamhack] x86 Assembly (2) 정리

    자료구조인 스택, C언어의 함수에 대응되는 프로시저, 시스템콜에 관한 어셈블리 내용이다. 스택 push val : val을 스택 최상단에 쌓음 pop reg : 스택 최상단의 값을 꺼내서 reg에 대입 프로시저 Procedure는 특정 기능을 수행하는 코드 조각을 말한다. 프로시저를 사용하면 반복되는 연산을 프로시저 호출로 대체할 수 있는 장점이 있다. 그리고 기능별로 코드 조각에 이름을 붙여 가독성을 높일 수 있다. 프로시저를 부르는 행위를 호출(Call)이라고 하고, 돌아오는 것을 반환(Return)이라 한다. 프로시저를 실행 하고 나서 원래 실행 흐름으로 돌아와야 하므로 call 다음의 명령어 주소 즉, 반환 주소(return address)를 스택에 저장하고 프로시저로 rip를 이동시킨다. cal..

    [Dreamhack] x86 Assembly (1) 정리

    어셈블리 언어와 어셈블러가 있다. 어셈블러는 어셈블리어 코드를 컴퓨터가 이해할 수 있는 기계어로 코드를 치환해준다. 소프트웨어를 역분석 하기위해, 기계어를 어셈블리 언어로 번역하는 역어셈블러(Disassembler)를 개발했다. 어셈블리 언어는 아키텍처마다 여러 종류가 있다. x64 어셈블리 언어의 기본 구조 구조는 명령어 즉, Operation Code(Opcode)와 피연산자(Operand)로 구성 된다. mov eax, 3 mov는 opcode로 대입하라. eax와 3은 각각 operand1, operand2를 나타낸다. operand1에 operand2를 대입하라는 문장이다. 명령코드 데이터 이동(Data Transfer) mov, lea 산술 연산(Arithmetic) inc, dec, add,..