운영체제26 1. Computer System Overview 운영체제(OS)란? - 컴퓨터 자원(하드웨어)을 효율적으로 관리할 수 있게 도와주는 소프트웨어 - 하드웨어를 효율적으로 관리해서 사용자에게 서비스를 제공하는 소프트웨어 하드웨어의 종류 1. 프로세서 - CPU - 그래픽 카드(GPU) : 연산 수행, 컴퓨터 모든 장치의 동작 제어 *레지스터 - 프로세서 내부에 있는 메모리이며, 컴퓨터에서 가장 빠르다. - 아래 3개 레지스터는 알아두는 것이 좋다. - PC (다음에 실행할 명령어 주소 보관) - IR (PC에서 가져온 명령어 보관) - ACC (계산할 때 데이터 일시적으로 저장) 2. 메모리 - 주 기억 장치 (RAM 또는 캐시 메모리) : CPU와 직접적으로 연결되어 있어서 데이터 접근 속도가 매우 빠름 : DRAM이 용량이 크고 저렴해서 주로 사용한다.. 2023. 2. 26. 7-2. API Hooking API Hooking이란? API의 호출을 가로채는 기술 예를 들면, A라는 함수를 호출했는데 내가 만든 B라는 함수를 호출하는 것. IAT Hook, DLL 함수의 호출 원리 DLL이 로드되는 위치를 알고 있고, 그 DLL이 가진 함수의 Offset을 알고 있다면? 어셈블리 명령으로 call 0x주소로 호출할 수 있을 것이다. 그러나 컴파일/링크 시 DLL 안의 함수 주소는 알 수 없다 (ASLR 때문) ASLR(Address space layout randomization)이란? ASLR은 실행 시 exe, dll, stack, heap등의 주소를 임의로 변경하는 보안 기법 ASLR을 끄고 MessageBoxA의 주소 덮어쓰기 #include #include using namespace std; ty.. 2022. 9. 21. 7-1. DllMain 기본 개념 DllMain DLL에는 DllMain이라는 함수를 만들 수 있는데 필수는 아님. hInstDLL - dll의 모듈 핸들, DLL이 프로세스 가상 메모리에 로드됐을 때 그 시작 주소 fdwReason - 어떤 이유로 DllMain이 호출되었는지에 대한 내용 lpvReserved - 명시적 링킹인지, 암시적 링킹인지를 구분짓는 매개변수임 (명시적 (LoadLibrary) 호출이면 0, 아니면 0이 아닌 값) fdwReason에 대한 상세 내용 DLL_PROCESS_ATTACH : DLL이 처음 프로세스에 매핑될 때 (LoadLibrary 등) DLL_PROCESS_DETACH : DLL이 프로세스에서 언로드될 때 (FreeLibrary 등) DLL_THREAD_ATTACH : 매핑된 프로세스에서 쓰레드를 .. 2022. 9. 21. 6-2-3. Critical Section 실습 #define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include using namespace std; CRITICAL_SECTION cs; int totalCount = 0; UINT threadProc(void* p) { totalCount++; int count = totalCount; static int value = 0; printf("%d번째 쓰레드 진입.. value = %d\n", count, value); EnterCriticalSection(&cs); for (int i = 0; i < 100; i++) value += 1; LeaveCriticalSection(&cs); printf("\t%d번째 쓰레드 종료.. .. 2022. 9. 20. 이전 1 2 3 4 ··· 7 다음