분류 전체보기 290

프로세스의 종료

프로세스는 4가지 형태로 종료될 수 있습니다. - 주 스레드의 진입점 함수가 반환될 때 (가장 아름다운 방법)- 프로세스 내 스레드 중 하나가 ExitProcess 함수를 호출 (좋지 못한 방법)- 다른 프로세스의 스레드가 TerminateProcess 함수를 호출 (역시 좋지 못한 방법)- 프로세스 내 모든 스레드가 전부 종료될 때  1. 주 스레드 진입점 함수(Entry-point Function)의 반환"주 스레드 진입점 함수의 반환"은 프로세스가 종료되는 조건 중 하나입니다.진입점 함수가 리턴된다는 뜻은 종료 함수를 거친다라는 의미로 보셔도 좋은데요, 이렇게 종료되어야 스레드들이 가지고 있던 리소스들이 제대로 해제가 됩니다.- 스레드가 가지고 있던 C++ 오브젝트들이 Destroyer를 통해 해제..

파일/디렉토리 접근 권한 (FILE_READ_DATA, FILE_WRITE_DATA ......)

파일/디렉토리 접근 권한에 대해 알아보겠습니다.+ Access Mask라고도 합니다. 요 접근 권한은 말 그대로 파일이나 디렉토리에 해당 프로세스가 어떠한 동작을 수행할 수 있는지를 나타내기도 합니다. 그림판에서 그림파일을 Open하는 동작을 예로들어보면..   1. wonjayk.png 라는 그림 파일을 열기 위해서 CreateFile 호출2. 접근 권한을 Generic Read 로 wonjayk.png 오픈 요러한 동작을 수행하게 되는데요 CreateFile 함수를 다시 살펴보면..- 윈도우 핸들 : http://wonjayk.tistory.com/270 CreateFile 함수를 호출하게 되면 lpFileName으로 호출된 파일의 핸들을 얻어오게 됩니다.여기서 두 번째 인자를 통해서 파일에 대한 접..

Display Memory - da, db, dc, dd, dD, df, dp, dq, du, dw

Memory Display 명령어들에 대해 알아보겠습니다.말 그대로 디버깅 중에 메모리 상태를 보여주는 명령어입니다.  windbg 도움말에는 위와 같이 설명되어있습니다.  하나씩 살펴보겠습니다.- 예제로는 CString(CHAR) 형태인 "CwonjaykDoc"라는 문자열을 활용했습니다.- 메모리 주소 : 0x00093a80- 디버깅시 자주 쓰일만한 것만 진하게 처리했습니다. 1. da : ASCII 문자열의 형태로 메모리 출력 2. db : 바이트 단위 배열로 보여주고 ASCII로 해석해서 출력 3. dc : Double-Word 단위로 메모리를 보여주고 ASCII로 해석해서 출력 4. dd : dc와 같지만 ASCII 해석 출력은 제외 5. dD : 메모리를 Double-Precision 소수점 형..

프로세스의 생성 2 - CreateProcess()

CreateProcess()의 두 번째 포스팅으로 STARTUPINFO 파라미터에 대해 알아보도록 하겠습니다. 프로세스가 생성될 때 이 STARTUPINFO or STARTUPINFOEX 구조체를 참조하여 프로세스의 속성들을 설정해줄 수 있습니다.CreateProcess()를 호출할 때 이 STARTUPINFO는 반드시 0으로 초기화 되어 있어야 합니다. 예를 들면,,,STARTUPINFO lpStartInfo = { sizeof(lpStartInfo) };CreateProcess(......, lpStartInfo, ......); 이런 식의 초기화가 필요합니다.- STARTUPINFO를 초기화 하지 않으면 쓰레기 값들이 들어가있기 때문에 오동작 가능성이 생기게 됩니다.  1. STARTUPINFO 구..

프로세스의 생성 1 - CreateProcess()

CreateProcess()는 프로세스를 생성하는 함수입니다.msdn을 참고해보면......- https://msdn.microsoft.com/en-us/library/windows/desktop/ms682425(v=vs.85).aspx  CreateProcess 함수가 호출되면 프로세스 커널 오브젝트를 생성하고 실행 파일의 코드와 구동에 필요한 DLL들을 프로세스 주소 공간으로 로드합니다. 그 후 스레드 커널 오브젝트를 생성해 Main 함수를 실행시키면서 TRUE를 리턴하게 됩니다.  이번 포스팅에서는 CreateProcess 함수의 파라미터들에 대해서 알아보도록 하겠습니다.- 9번째 파라미터인 lpStartupInfo는 다음 포스팅에서 따로 언급하도록 하겠습니다. (양이 많아요~)- lpStartup..

Android Design Pattern (MVC, MVP, MVVM)

Android에서는 일반 애플리케이션 디자인 패턴(코드 디자인)이 통용될 수 있습니다. 따라서, 디자인 패턴으로 MVC, MVP, MVVM 등 다양한 형식으로 작성할 수 있는데요 무엇이 좋다/나쁘다 보다는 개발자의 선택으로, 개발하려는 애플리케이션이나 개발자 성향에 따라서 효율적인 모델을 적용하시면 되겠습니다. - 유지보수, 관리를 용이하게 하기 위해! 이 포스팅에서는 여러가지 디자인 패턴들 중 MVC, MVP, MVVM 패턴들에 대해 알아보겠습니다. 1. MVC 패턴 가장 초창기 패턴으로 Model, View, Controller 의 개념입니다. Model : 입력에 대한 처리를 수행하는 역할 View : 처리 결과를 화면에 표시하는 역할 Controller : 사용자의 입력을 받는 역할 Control..

Mobile/Android 2016.02.06

강제 BSOD로 전체덤프 저장하기

Process Hang이나 Application Error가 발생했을 때 Hang/Error가 발생한 프로세스의 덤프만으로도 해결이 가능한 경우들이 있지만, 간혹 다른 프로세스에 의해 발생한 경우라면 프로세스 덤프 만으로는 원인을 찾기가 어려워집니다. 이럴 때, 문제 원인을 찾기 위해 전체 덤프가 필요한데요 전체 덤프를 얻기 위해 BSOD(블루스크린)를 발생시키는 방법은 아래와 같습니다.1. 키보드 이용2. OSRonline의 BANG! 활용- https://www.osronline.com/article.cfm?article=1533. Sysinternals의 Not My Fault 활용- http://download.sysinternals.com/files/notmyfault.zip 이 중 2번 방법인..

Android Project - 첫 안드로이드 프로젝트 생성

Android Studio를 이용해 안드로이드 프로젝트를 생성하고 앱을 실행시켜보겠습니다. 1) Android Studio 실행 -> Start a new Android Studio Project 클릭! 2) 프로젝트 이름을 설정합니다. - Application Name : 이 앱의 이름을 설정합니다. - Company Domain : 직역하자면 홈페이지 주소를 써달라는 이야기인데요, + 패키지 이름이 자동으로 설정되는 것이니 관리차원에서 필요한대로 작성하시면 됩니다. + 자바에서 의미하는 패키지는 클래스/인터페이스들의 묶음이라고 생각하시면 됩니다. + 꼭 홈페이지 도메인을 작성하지 않으셔도 돼요!! 3) Android Device를 설정합니다. - 작성할 Android App이 지원할 Android O..

Mobile/Android 2016.01.30

Android 개발환경 세팅 - Android Studio 설치

Android 개발환경 세팅 두번째 단계입니다. - Android 개발환경 세팅 첫번째 JDK 설치 포스팅 : http://wonjayk.tistory.com/272 Android Studio를 설치하기 위해서는 아래의 사이트에서 설치파일을 우선 다운로드 받습니다. - http://developer.android.com/sdk/index.html 1) http://developer.android.com/sdk/index.html 접속 -> Download Android Studio 클릭 - 약관 동의 이후에 다운로드를 시작하게 됩니다. 2) 다운로드 받은 파일 실행 3) 쭈욱 Next 버튼을 클릭하시다가.. 아래와 같은 선택지를 만나시게 되면 모두 체크하시고 Next! - Android SDK : And..

Mobile/Android 2016.01.22

Android 개발환경 세팅 - JDK 설치

안드로이드 개발환경 세팅 과정은 크게 3가지 과정으로 나누어볼 수 있습니다. 1. JDK (Java Development Kit) 설치 2. Android Studio 설치 = IDE (Integrated Development Environment) + SDK (Software Development Kit) 그 중 JDK 설치에 관한 내용입니다. JDK는 아래 링크에서 다운로드 받을 수 있습니다. - http://www.oracle.com/technetwork/java/javase/downloads/index.html 1) Java Platform (JDK) 다운로드 버튼을 누르시면 아래와 같은 화면이 나옵니다. 2) 라이센스에 동의하시고 설치하시고자 하는 OS(개발용PC) 버전과 같은 파일을 받아주세요..

Mobile/Android 2016.01.20