본문 바로가기

개발158

해커랭크(HackerRank) - Divisible Sum Pairs / C++ 문제 : 해커랭크 - Divisible Sum Pairs 난이도: Easy 언어 : C++ // Complete the divisibleSumPairs function below. int divisibleSumPairs(int n, int k, vector ar) { int cnt = 0; for(int i = 0; i< n-1 ; i++) { for(int j=i+1;j 2020. 2. 3.
해커랭크(HackerRank) - Birthday Chocolate / C++ 문제 : 해커랭크 - Birthday Chocolate 난이도: Easy 언어 : C++ // Complete the birthday function below. int birthday(vector s, int d, int m) { int way =0; for(int i =0 ;i 2020. 2. 3.
해커랭크(HackerRank) - Breaking the Records / C++ 문제 : 해커랭크 - Breaking the Recods 난이도: Easy 언어 : C++ // Complete the breakingRecords function below. vector breakingRecords(vector scores) { int bestScoreCnt = 0; int worstScoreCnt = 0; int maxScore = scores.at(0); int minScore = scores.at(0); vector ret ; for(auto iter = scores.begin(); iter!=scores.end();iter++) { if(*iter>maxScore) { bestScoreCnt++; maxScore= *iter; } if(*iter 2020. 2. 3.
MFC AfxBeginThread 사용시 주의: m_bAutoDelete AfxBeginThread AfxBeginThread는 MFC프로그래밍에서 다중 쓰레드를 생성할 수 있게 해준다. 특히 AfxBeginThread는 객체 하나를 리턴하게 되는데 CWinThread의 인스턴스 리턴하게 된다. 이때 용도에 따라 UI Thread, Worker Thread 로 사용할 수 있다. CWinThread::m_bAutoDelete AfxBeginThread로 생성한 CWinThread 인스턴스는 쓰레드 종료시 주의할 점이 있는데 바로 종료시 자동으로 삭제된다는 점이다. CWinThread의 맴버 변수에는 m_bAutoDelete가 존재하는데 기본적으로 TRUE로 설정 되어있다. 쓰레드 종료시 자동으로 객체를 삭제할지를 설정하는 변수이다. 쓰레드를 종료하고나서 쓰레드의 종료코드를 구한.. 2020. 1. 30.
Windows 커널모드 메모리 할당과 페이지 단편화 -ExAllocatePoolWithTag Windows의 커널모드에서 메모리를 동적 할당을 할때 많이 쓰이는 함수가 바로 ExAllocatePoolWithTag이다. 커널 모드에서는 한정된 커널 메모리 자원을 사용하게 되는데 이때 메모리 할당에 대한 효율성을 따져야 한다. 보통 가상메모리 공간의 Page단위를 할당 받게 되는데 OS과목이나 시스템프로그래밍 과목에서 배운 메모리 단편화 문제가 생기게 된다. Windows WDK에 정의된 PAGE_SIZE는 32비트 기준 0x1000이다. #if defined(_X86_) // // i386 Specific portions of Mm component. // // Define the page size for the Intel 386 as 4096 (0x1000). // #define PAGE_SIZ.. 2020. 1. 14.
php 7.3 CentOS7에서 설치하기, php-fpm 1. php 7.3 Remi 레포지토리 추가 CentOs7과 Fedora 배포판에서 php 7.3은 Remi 레포지토리를 추가하여 설치 할 수 있다. sudo yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm sudo yum -y install epel-release yum-utils 2. php 5.4 비활성화 기본으로 php 5.4가 적용되는데 레포지토리에서 비활성화 하고 7.3을 활성화 해준다. sudo yum-config-manager --enable remi-php73 //7.3 sudo yum-config-manager --enable remi-php74 // 7.4 sudo yum-config-manager --dis.. 2020. 1. 10.
DeviceIoControl 버퍼 사용법 DeviceIoControl 사용시 버퍼 방식에 따른 버퍼 접근에 대한 정리이다. METHOD_BUFFERED Input과 Output 버퍼 모두 AssociatedIrp.SystemBuffer를 사용한다. 이때 버퍼의 사이즈는 사용자의 Input과 Output 버퍼사이즈의 최대 사이즈이다. Input과 Output 모두 같은 메모리를 사용하기 때문에 버퍼를 사용할때 Input 버퍼를 먼저 읽고 Output버퍼에 써야 한다. (안그럼 덮어 써진다.) METHOD_IN_DIRECT, METHOED_OUT_DIRECT Input Data는 Irp->AssoicatedIrp.SystemBuffer로 표현된다. Output Data는 MDL로 표현되며 Irp->MdlAddress에 들어간다. 읽기나 쓰기 버퍼의.. 2020. 1. 7.
드라이버와 통신하기 IRP_MJ_DEVICE_CONTROL 드라이버와 통신하기 IRP_MJ_DEVICE_CONTROL 장치 드라이버는 I/O Manager로 부터 File Object로 취급되며 File Operation을 수행 할 수 있다고 하였다. User Application에서 Create, Read, Write, Close Operation를 통해 드라이버와 통신 할 수 있다. 하지만 장치가 쓰기, 읽기 작업만 하지 않을 것 이다. 장치가 동작하는데 다양한 기능들을 수행하기 위해서는 이보다 더 많은 명령이 있어야 할 것이다. 때문에 I/O Control Code를 통해 다양한 명령을 정의하고 수행 할 수 있다. MSDN에 의하면 I/O Control 코드는 User Application과 드라이버간 통신을 가능하게 해준다. 또한 드라이버 사이에 통신을 .. 2020. 1. 7.
Zw함수의 접두사의 의미는? Zw함수의 접두사의 의미는? Kernel 모드 드라이버를 개발하다보면 Zw가 붙은 함수들을 호출 하게 된다. Kernel 모드 함수들의 접두어는 Zw 이외에도 여러가지 접두어들이 있다. 그 예는 아래와 같다. 접두사 커널 구성요소 루틴 예 Cm Configuration manager CmRegisterCallbackEx Ex Executive ExAllocatePool Hal Hardware abstraction layer HalGetAdapter Io I/O manager IoAllocateIrp Ke Kernel core KeSetEvent Mm Memory manager MmUnlockPages Ob Object manager ObReferenceObject Po Power manager PoSet.. 2020. 1. 3.