목록2025/02/13 (4)
맨땅에 코딩
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/mHBvM/btsMgIzMSTA/xx1IxHx0aqsRjCOaWODi01/img.png)
*화이트햇 스쿨 2기에서 이수한 이론교육 내용을 바탕으로 작성되었습니다. 1. 리버스 엔지니어링- 역공학- 치킨집을 먼저 차려버리는 것~??~?~~~?~? 컴파일러와 언어- 컴퓨터는 0과 1로 소통하는 계산기- 인간이 알아 볼 수 없기 때문에 기계어를 고안- 기계어를 어셈블리로 매칭- 그 이후로 고급언어로 발전 칼큘레이터와 컴퓨터의 차이- 수행 능력의 차이- 해석 능력이 없는 계산기는 단순 칼큘레이터- 폰노이만의 Stored-Program Computer- 버그는 진짜 벌레였다~~~!!~!~!~~~! 컴파일 과정 gcc- 전처리: cpp- 컴파일: ccl- 어셈블: as- 링크: id 디스어셈블- add rax, rbx -> 4803c3- 리눅스에서는 objdump를 이용해 확인이 가능함 2. 분석방법..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/d2nCkQ/btsMh49uR3P/qtR3uZudt8SNFXAgFyI7vK/img.png)
*화이트햇 스쿨 2기에서 이수한 이론교육 내용을 바탕으로 작성되었습니다. 1. Memory Layout Memory Layout(메모리 레이아웃)이란 프로그램이 실행될 때 프로세스가 사용하는 메모리 공간의 구조를 의미함운영체제(OS)는 프로세스마다 독립적인 가상 메모리 공간을 할당하며, 이를 특정 영역으로 나누어 관리함 2. Stack Overflow Stack Frame- 스택 프레임이란 함수가 호출될 때, 그 함수만의 스택 영역을 구분하기 위하여 생성되는 공간임- 이 공간에는 함수와 관계되는 지역 변수, 매개 변수, 복귀주소가 저장되며, 함수 호출 시 할당되며, 함수가 종료되면서 소멸함 Shellcode- 시스템의 특정 명령을 실행하는 작은 사이즈의 프로그램으로 일반적으로 어셈블리어로 작성되어 있음..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/AR87i/btsMiYm9BEm/y1JIacEHjp22KuY3OwbWXk/img.png)
*화이트햇 스쿨 2기에서 이수한 이론교육 내용을 바탕으로 작성되었습니다. 1. 컴퓨터의 기본 구조 컴퓨터 언어- 단위와 용어 1. Human language(C)2. Assembly3. byte4. bit (Binary) - 컴퓨터가 이해할 수 있는 언어 체계가 있음- 번역기가 필요함- 외국어 배우듯이 배우면 됨 어셈블리 언어 기초- 사람이 해석할 수 있는 가장 낮은 수준의 컴퓨터 언어- 내 프로그램을 컴퓨터가 처리하는 수준으로 해석- 번역이 필요함 API- 컴퓨터나 컴퓨터 프로그램 사이의 연결 - 내가 구현하지 않아도 기능을 사용할 수 있음- 대신 서로 잘 알려줘야 함 컴파일과 링킹- 소스코드를 기계어로 만듦- 기계어들을 잘 연결함- 외부 코드도 잘 연결함 2. 컴퓨터 메모리 구조 포인터- 메모리 공..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/c53bYY/btsMi1c49ak/MmgDMpUyRBZfUfLUEtW3B1/img.png)
*화이트햇 스쿨 2기에서 이수한 이론교육 내용을 바탕으로 작성되었습니다. 1. 어셈블리 개요 CPU 아키텍쳐- CPU 내부 동작 방식과 구성 요소를 정의하는 설계 개념- CPU 아키텍처에 따라 명령어, 레지스터 구조 등이 다름- x86, arm, mips, Power PC 등이 있음 x86- 32bit 아키텍쳐- 64bit 버전으로 x64(amd64, x86_64)가 있음- Windows, Linux, Mac OS 등에서 사용됨 arm- 32bit 아키텍쳐- 64bit 버전으로 arm64(AArch64)가 있음- 모바일 기기 및 임베디드 시스템에 사용됨 어셈블리어- 어셈블리어: 기계어와 일대일 대응이 되는 저급 언어- 기계어: 0과 1로 이루어진 컴퓨터가 이해할 수 있는 언어- 저급언어: 컴퓨터가 이해하..