| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
- 리버싱
- rev
- Rich Header
- crackme
- stack frame
- __stdcall
- 프로그래머스
- 코드엔진
- __fastcall
- Python
- Programmers
- Reversing
- __cdecl
- 리치헤더
- Dos Stub
- x32
- CodeEngn
- pe format
- ABI
- Image dos header
- 파이썬
- 실행파일
- RVA
- 함수 호출 규약
- 크랙미
- Calling Convention
- __vectorcall
- x64
- image section header
- 32bit
- Today
- Total
목록분류 전체보기 (40)
kj0on
1. [PCCE 기출문제] 1번 / 문자 출력https://school.programmers.co.kr/learn/courses/30/lessons/3402071-1. 문제 설명주어진 코드는 변수에 데이터를 저장하고 출력하는 코드입니다. 아래와 같이 출력되도록 빈칸을 채워 코드를 완성해 주세요.1-2. 출력 예시321Let's go!1-3. 풀이 코드message = "Let's go!"print("3\n2\n1")print(message)2. [PCCE 기출문제] 2번 / 각도 합치기https://school.programmers.co.kr/learn/courses/30/lessons/3402062-1. 문제 설명일반적으로 두 선분이 이루는 각도는 한 바퀴를 360도로 하여 표현합니다. 따라서 각도에 ..
0. x32 함수 호출 규약 (32bit Calling Convention) 32비트 함수 호출 규약의 자세한 내용은 https://kj0on.tistory.com/42 참고1. Common Calling Convention (__stdcall, __cdecl, __fastcall, __vectorcall) 성능항목의미테스트 함수int(int a, int b, int c, int b) → a + b + c + dfloat(float a, float b, float c, float d) → a + b + c + dITERATIONS한 번의 샘플에서 각각의 테스트 함수를 몇 회 호출할지에 대한 값이다. 값이 클수록 측정 정밀도는 올라가지만 전체 실행 시간이 길어진다.SAMPLES독립적인 측정 값이다. 매 샘..
0. 유래라이브러리는 여러 프로그램에서 공통으로 재사용하려고 묶어 둔 코드의 집합이다. 초창기엔 물리 미디어(천공 카드, 자기선, 펀치 테이프)에 저장된 재사용 가능한 루틴의 모음이었고, 오늘날엔 정적/동적 바이너리, 패키지, 모듈, 프레임워크, 표준 라이브러리 등으로 발전했다. 0-1. 타임라인 0-1-1. 1837 ~ 1889: 해석 기관Each formula would require its own set of cards, and by degrees the engine would have a library of its own.찰스 배비지의 해석기관(The Analytical Engine)의 설계는 연산(operations) 카드와 숫자(cards of numbers)를 분리해 조합하는 방식을 전제했고..
1. 정의 ABI (Application Binary Interface)는 어플리케이션과 운영체제 또는 컴파일된 코드 간의 상호작용 방식을 정의한 이진 수준의 규약이다. 쉽게 말해, 컴파일된 바이너리들이 서로 호환되도록 하는 규칙 모음을 뜻한다.2. x64 ABI규칙역할필수 규칙(ABI)조건부 규칙스택 정렬 규칙Alignment(정렬)프롤로그, 에필로그을 제외한 모든 구간에서 RSP ≡ 0 (mod 16)을 유지해야 한다.Leaf 함수는 정렬을 다시 맞출 필요가 없다.이후의 단계에서 정렬이 보장되어 있는 경우는 제한적으로 정렬을 유지하지 않아도 된다.섀도우 스페이스 규칙Call Setup(호출 준비)Caller(호출자)는 언제나 32byte Shadow Space를 확보한 상태에서 함수를 호출해야 한다...
1. 정의 ABI (Application Binary Interface)는 어플리케이션과 운영체제 또는 컴파일된 코드 간의 상호작용 방식을 정의한 이진 수준의 규약이다. 쉽게 말해, 컴파일된 바이너리들이 서로 호환되도록 하는 규칙 모음을 뜻한다.2. x32 ABI규칙역할필수 규칙(ABI)조건부 규칙스택 정렬 규칙Alignment (정렬)모든 구간에서 ESP ≡ 0 (mod 4)를 유지해야 한다.16byte 정렬을 요구하는 SIMD 명령을 사용 할 경우, 함수 내부에서 추가 정렬을 보장해야 한다.레지스터 보존 규칙Register Save (레지스터 보존)Callee(피호출자)에서 비휘발성 레지스터를 사용했다면 함수 내부에서 원래 값으로 복구해야 한다.비휘발성 레지스터를 사용하지 않았다면 저장, 복구 코드가..
0. 64비트 스택 프레임 (64bit Stack Frame)64비트 스택프레임에 대한 자세한 설명은 https://kj0on.tistory.com/43 참고1. 정의함수와 호출자 간에 인수를 전달하고 값을 반환하기 위한 규칙 프로시저(함수) 호출 시 인자를 어디에 어떤 순서로 전달하고, 누가 스택을 정리하며, 레지스터를 보존할지, 어느 레지스터로 값을 반환할지 등을 규정한 저수준 인터페이스 계약이다. 컴파일러, 언어, OS, CPU가 서로 다른 오브젝트 코드를 같은 ABI 안에서 링크 및 호출할 수 있게 해준다.2. Caller(호출자)와 Callee(피호출자)Caller는 함수를 호출하는 쪽이고, Callee는 호출된 함수이다. Caller는 인자를 준비하고 제어를 Callee에게 넘기며, Calle..
0. x64 ABI x64 ABI는 https://kj0on.tistory.com/47 참고1. 정의 스택 프레임(Stack Frame)은 함수가 호출될 때 스택에 형성되는 하나의 논리적 메모리 블록으로, 해당 함수 실행에 필요한 정보를 일시적으로 보관해 주는 단위이다. 32비트 때와 유사한 목적을 가지지만, 64비트 함수 호출 규약과 CPU 설계 변화에 맞추어 구조와 규칙이 달라졌다.2. 함수 프레임 (Function Frame)함수의 시작에 붙는 패턴은 프롤로그(prologue), 끝 부분에 붙는 패턴은 에필로그(epilogue)로 구분할 수 있으며, 직접 작성한 코드의 로직은 두 패턴 사이의 바디(body)에 위치하게 된다. 이러한 공통된 틀은 컴파일 단계에서 컴파일러가 자동으로 삽입한다. 덕분에 ..
0. 32비트 스택 프레임 (32bit Stack Frame)32비트 스택프레임에 대한 자세한 설명은 https://kj0on.tistory.com/41 참고1. 정의함수와 호출자 간에 인수를 전달하고 값을 반환하기 위한 규칙 프로시저(함수) 호출 시 인자를 어디에 어떤 순서로 전달하고, 누가 스택을 정리하며, 레지스터를 보존할지, 어느 레지스터로 값을 반환할지 등을 규정한 저수준 인터페이스 계약이다. 컴파일러, 언어, OS, CPU가 서로 다른 오브젝트 코드를 같은 ABI 안에서 링크 및 호출할 수 있게 해준다. https://learn.microsoft.com/ko-kr/cpp/cpp/calling-conventions?view=msvc-1702. Caller(호출자)와 Callee(피호출자)Call..
0. x32 ABI x32 ABI는 https://kj0on.tistory.com/46 참고1. 정의스택 프레임(Stack Frame)은 함수가 호출될 때 스택에 형성되는 하나의 논리적 메모리 블록으로, 해당 함수 실행에 필요한 정보를 일시적으로 보관해 주는 단위이다.2. 함수 프레임 (Function Frame)#include int fun3(void) { return 3;}int fun2(void) { fun3(); return 2;}int fun1(void) { fun2(); return 1;}int main(void) { printf("Hello World!\n"); // Hello World! fun1(); return 0;} 위 이미지는 main→printf→fun1→fun2→fun3로 깊어졌..
1. 조건에 맞게 수열 변환하기 1 1-1. 문제 설명정수 배열 arr가 주어집니다. arr의 각 원소에 대해 값이 50보다 크거나 같은 짝수라면 2로 나누고, 50보다 작은 홀수라면 2를 곱합니다. 그 결과인 정수 배열을 return 하는 solution 함수를 완성해 주세요.https://school.programmers.co.kr/learn/courses/30/lessons/1818821-2. 풀이 코드def solution(arr): answer = [] for i in arr: if i >= 50 and i % 2 == 0: answer.append(i // 2) elif i https://github.com/kj0on/BaekjoonHub..