프로그래밍

프로그래밍/JavaScript

JavaScript 클로저 ( Closer )

function funcA() { var text = "Hello"; return function () { console.log(text); } } var funcB = funcA(); funcB(); 위의 예제에서처럼 자바스크립트에서는 함수를 객체로 표현하기 떄문에 함수를 값으로 사용할 수 있고 내부함수에서는 외부함수의 필드에 접근할 수 있다. funcA 함수를 실행하면 text 변수를 출력하는 익명함수가 반환되고 이값을 funcB 에 넣은뒤 실행하면 Hello 라는 값이 console 에 출력된다. 클로저란 내부함수가 외부함수의 필드에 접근할 수 있고, 외부함수는 외부함수의 필드에 접근하는 내부함수가 소멸될 때까지 소멸되지않는 특성을 의미한다.

프로그래밍/JavaScript

JavaScript 모듈 ( Module )

모듈이란 바닐라 자바스크립트에서는 존재하지 않는 개념으로 프로그램을 구성하는 작은 로직들을 의미한다. //index.html 위의 예제 코드에서 printHello 함수가 자주 사용되고 이 함수를 호출하려는 곳이 여러 곳일 때 위의 예제처럼 함수가 정의되어있으면 유지보수가 어렵고 사용되는곳마다 이 함수를 정의해주어야 한다. 이럴 때 모듈이 사용된다. // printHello.js function printHello() { alert("Hello"); } //index.html 위의 예제에서는 printHello 함수를 새로운 js 파일에 정의하고 js 파일을 index에서 불러와 사용하고 있다. js 파일의 이름은 원하는 파일명을 사용하면 된다.

프로그래밍/JavaScript

JavaScript 객체 ( Object )

객체 생성 // 객체 생성 방법 1 var member = { 'info' : {'name': 'MAJG', 'level': 100, 'human': true}, 'print' : function() { for(key in this.info) { console.log(`key : ${key}, value : ${this.info[key]}\n`); } } }; // 객체 생성 방법 2 var member = {}; member['info'] = {'name': 'MAJG', 'level': 100, 'human': true}; member['print'] = function() { for(key in this.info) { console.log(`key : ${key}, value : ${this.inf..

프로그래밍/WinAPI

WaitForSingleObject 함수

DWORD WaitForSingleObject( HANDLE hHandle, DWORD dwMilliseconds ); WaitForSingleObject 함수는 지정된 개체가 신호 상태가 되거나 시간 제한 간격이 경과할때 까지 기다린다. hHandle 개체의 핸들이며 대기가 아직 보류중인 동안 이 핸들이 닫히면 함수는 동작하지않는다. 핸들은 SYNCHRONIZE 엑세스 권한이 있어야한다. dwMilliseconds 지정된 값만큼 시간을 기다린다. 이 값이 0인 경우 객체가 신호받지않으면 대기상태로 들어가지않으며 항상 즉시 반환된다. 이 값이 INFINITE 인 경우 객체가 신호를 받을 떄만 함수가 반환된다. 이 함수가 성공적으로 실행을 완료하면 WAIT_ABANDONED, WAIT_OBJECT_0, W..

프로그래밍/WinAPI

CreateRemoteThread 함수

HANDLE CreateRemoteThread( HANDLE hProcess, LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId ); CreateRemoteThread 함수는 다른 프로세스의 가상 주소 공간안에서 실행되는 쓰레드를 생성한다. hProcess 쓰레드를 생성할 프로세스 핸들이다. 이 핸들은 반드시 PROCESS_CREATE_THREAD, PROCESS_QUERY_INFORMATION, PROCESS_VM_OPERTATION, PROCESS_VM_WRITE..

프로그래밍/WinAPI

GetProcAddress 함수

FARPROC GetProcAddress( HMODULE hModule, LPCSTR lpProcName ); GetProcAddress 함수는 특정 DLL에서 내보내기된 함수 또는 변수의 주소를 가져온다. hModule 함수 또는 변수를 포함하고있는 DLL 모듈에 대한 핸들을 나타낸다. LoadLibrary, LoadLibraryEx, LoadPackageLibrary, GetModuleHandle 함수를 통해 인자값을 채울 수 있다. lpProcName 함수 또는 변수의 이름이나 함수의 서수값을 의미한다. 이 함수가 성공적으로 실행을 완료하면 내보내기된 함수 또는 변수의 주소값이 반환된다. 함수의 실행이 실패하면 NULL 이 반환되며 실패에 대한 자세한 정보는 GetLastError 함수를 통해 알 ..

프로그래밍/WinAPI

GetModuleHandleW 함수

HMODULE GetModuleHandleW(LPCWSTR lpModuleName); GetModuleHandleW 함수는 특정 모듈에 대한 모듈 핸들을 검색한다. 모듈은 호출프로세스에 의해 로드되어 있어야한다. lpModuleName 로드된 모듈의 이름으로 확장자는 *.dll 또는 *.exe 이다. 이 매개변수가 NULL 일 경우, 호출 프로세스 ( *.exe )를 생성하는데 사용된 파일의 핸들을 반환한다. GetModuleHandleW 함수가 성공적으로 실행을 완료하면 특정 모듈의 핸들을 반환한다. 함수의 실행이 실패할 경우 NULL 을 반환하며 실패에대한 자세한 정보는 GetLastError 함수를 통해 알 수 있다. Example HMODULE hMod = GetModuleHandle(L"kern..

프로그래밍/WinAPI

WriteProcessMemory 함수

BOOL WriteProcessMemory(HANDLE hProcess, LPVOID lpBaseAddress, LPCVOID lpBuffer, SIZE_T nSize, SIZE_T *lpNumberOfBytesWritten ); WriteProcessMemory 함수는 특정 프로세스의 메모리영역에 데이터를 쓰기한다. hProcess 메모리를 수정할 프로세스의 핸들이다. 이 핸들은 반드시 PROCESS_VM_WRITE 와 PROCESS_VM_OPERATION 권한을 가져야한다. lpBaseAddress 데이터 쓰기를 시작할 프로세스의 메모리주소이다. 데이터 쓰기를 시작하기전 시스템은 지정된 크기의 주소와 메모리의 모든 쓰기 접근이 가능한지 확인하고, 접근할 수 없는경우 함수는 실패한다. lpBuffer ..

프로그래밍/WinAPI

VirtualAllocEx 함수

LPVOID VirtualAllocEx(HANDLE hProcess, LPVOID lpAddress, SIZE_T dwSize, DWORD flAllocationType, DWORD flProtect); VirtualAllocEx 함수는 특정 프로세스의 가상 주소 공간 내에서 메모리 영역의 상태를 변경, 할당, 해제하고, 할당하는 메모리를 0으로 초기화한다. hProcess 특정 프로세스의 핸들이며 이 프로세스의 가상 주소 공간 안에 메모리 영역을 할당한다. 이 핸들은 반드시 PROCESS_VM_OPERTATION 권한을 가지고 있어야한다. 권한에 대한 자세한 정보는 MSDN 에서 확인할 수 있다. lpAddress 할당할 페이지 영역에 대해 시작주소를 지정하는 포인터이다. lpAddress 가 NULL..

프로그래밍/WinAPI

OpenProcess 함수

HANDLE OpenProcess(DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwProcessId); OpenProcess 함수는 실행되고있는 로컬 프로세스의 HANDLE 을 받아오는 역할을 한다. dwDesiredAccess 프로세스 객체의 접근 권한이다. 이 파라미터 MSDN : Process Access Right 에서 확인할 수 있으며 하나 또는 그 이상일 수 있다. bInheritHandle 이 파라미터의 값이 Ture 라면 이 프로세스에 의해 생성된 프로세스가 핸들을 상속받게된다. False 일 경우 프로세스는 핸들을 상속 받지 않는다. dwProcessId 핸들을 가져올 로컬프로세스의 식별자를 의미한다. 이 파라미터의 값을 GetCurrentPr..

MAJG
'프로그래밍' 카테고리의 글 목록 (3 Page)