728x90
반응형

[살거]

1. 라즈베리 파이 3 세트 라즈베리파이3 + 공식 정품 엔클로져 + 방열판 세트

 

[사진 출처] 아이씨뱅큐 (https://www.icbanq.com/P007115238//?catg_code=120)

 

[특징]

- 블루투스, 와이파이 기능 추가됨. -> 무선 랜 카드 구입할 필요 x

- 64bit CPU -> 라즈비안 OS는 64bits가 없음 (32bits 설치해서 사용 중)

 

2.  파이카메라 : 라즈베리파이 카메라모듈 V2, 8MP (RPI 8MP CAMERA BOARD)

 

[사진 출처] 디바이스 마트 (http://www.devicemart.co.kr/1077951)

 

[특징]

- CSI 인터페이스 사용

 

[주의]

- 라즈베리 파이는 충전기 연결 시 바로 부팅됨.

- Micro SD 카드에 운영체제를 넣어서 사용하므로 마이크로SD 필요함. (이미 있어서 구입 안 함, 16GB 사용 중, class 10 이상 권장)

cf. UHS도 class 10 이상임, MLC 방식 추천 -> 잘 모르겠으면 링크

- 카메라와 파이를 원활하게 사용하려면 정격 출력 5V, 2A 이상은 되어야 할 듯.

cf. VEGA 스마트폰 충전기 사용 중 (정격 출력 5V, 2A)

- HDMI 포트 하나 있음 -> 모니터 연결은 알아서 잘할 것!

 

[링크]

- 디바이스 마트 : 파이 카메라 (약 3만원)

- 아이씨뱅큐 : 라즈베리 파이3 (약 5만원)

 

728x90
반응형
728x90
반응형

1. 개요

 - hosts 파일 수정으로 특정 URL을 웹 브라우저에 입력 시 원하는 서버로 연결 가능.

ex) www.daum.net 입력 -> 결과는 www.google.com 로 이동

 - hosts 파일 경로 : C:\Windows\System32\drivers\etc\hosts

 - 리소스 드랍 활용

 - 관리자 권한 필요

 - hosts 파일 변경은 백신에서 탐지됨

 

2. 설정

 

3. 코드

#include<windows.h>
#include "resource.h" // 수정된 hosts 파일을 리소스로 등록 : IDR_FILE1

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
HINSTANCE g_Inst;
LPCWSTR lpszClass = TEXT("WINDOW");

// WinMain 생략

LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
    HMODULE hDll;
    HRSRC hResource;
    HGLOBAL hData;
    DWORD filesize, numWritten;
    LPVOID pResource;
    HANDLE hFile;

    switch(iMessage)
    {
    case WM_CREATE:
        // 리소스 가져옴
        hResource = FindResource(g_Inst, MAKEINTRESOURCE(IDR_FILE1), L"file");
        hData = LoadResource(g_Inst, hResource);
        pResource = LockResource(hData);
		filesize = SizeofResource(hDll, hResource);

        // 가져온 리소스를 hosts 경로에 써줌
        hFile = CreateFile(L"C:\\Windows\\System32\\drivers\\etc\\hosts", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);
        if(hFile != INVALID_HANDLE_VALUE)
        {
            if(WriteFile(hFile, pResource, filesize, &numWritten, NULL))
            {
                MessageBox(0, L"write success", 0, 0);
            }
        }
	CloseHandle(hFile);
        return 0;

    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    }
    return DefWindowProc(hWnd, iMessage, wParam,lParam);
}
 
728x90
반응형
728x90
반응형

1. 코드

# MIPS :: Hello World Example ::
# File Name : "HelloWorld.asm"

.data
    str: .asciiz "\nHello World\n"
.text

main:
    li $v0, 4         # 4 : print
    la $a0, str
    syscall
    
    li $v0, 10        # 10 : exit
    syscall

위에 소스

 

2. 실행

파일 열기

 

실행 (Go)

728x90
반응형

'기타' 카테고리의 다른 글

[tip] ffmpeg 파일 변환  (0) 2018.01.16
[tip] OneDrive 완전삭제  (0) 2017.10.16
[tip] Putty 설정 파일  (0) 2017.10.07
[tip] windows7 로그인 화면 캡쳐  (0) 2016.09.18
[tip] windows7 로그인 배경화면 변경 방법  (0) 2016.09.17
[MIPS] PCSpim  (0) 2015.10.03
728x90
반응형

1. 개요

 - PCSpim : MIPS 프로세서 시뮬레이터 (mips반대 -> spim)

 

2. UI

1) 레지스터 : 레지스터 값 확인

2) 코드 : 코드 확인 가능

3) 메모리 : 데이터, 스택 등의 메모리 확인 가능

4) Go (빨간 박스 안쪽의 왼쪽 버튼) : 시뮬레이션 시작, 누르면 Starting Address를 정할 수 있다. (기본은 0x00400000)

 

3. 다운로드

- http://pages.cs.wisc.edu/~larus/spim.html

728x90
반응형

'기타' 카테고리의 다른 글

[tip] ffmpeg 파일 변환  (0) 2018.01.16
[tip] OneDrive 완전삭제  (0) 2017.10.16
[tip] Putty 설정 파일  (0) 2017.10.07
[tip] windows7 로그인 화면 캡쳐  (0) 2016.09.18
[tip] windows7 로그인 배경화면 변경 방법  (0) 2016.09.17
[MIPS] Hello World  (0) 2015.10.03
728x90
반응형

1. 코드

//리소스 변수 선언
HMODULE hDll;
HRSRC hResource;
HGLOBAL hData;
DWORD filesize, numWritten;
LPVOID pResource;
HANDLE hFile;
TCHAR Adr[] = L"C:\\File.exe"; // 파일 경로

// 아래는 코드 적용 부분, 필요한 부분에 적절히 사용
// 리소스 찾기, 에러 시 NULL
hResource = FindResource(g_Inst, MAKEINTRESOURCE(IDR_EXE1), L"exe");
// 리소스 로드, 에러 시 NULL
hData = LoadResource(g_Inst, hResource);
// 락, 에러 시 NULL
pResource = LockResource(hData);

// 리소스 사이즈 구하기, 에러 시 NULL
filesize = SizeofResource(hDll, hResource);

// 리소스를 파일로 작성
hFile = CreateFile(Adr, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);
if(hFile != INVALID_HANDLE_VALUE)
{
	WriteFile(hFile, pResource, filesize, &numWritten, NULL);
}
CloseHandle(hFile);
 

 

728x90
반응형
728x90
반응형

1. 개요

- OSVERSIONINFOEX 구조체로 윈도우의 버전을 알수있음.

 

2. 코드

OSVERSIONINFOEX osvi;

ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); 

// OSVERSIONINFOEX 구조체를 이용하여 버전 구분
switch(osvi.dwPlatformId){    
    // NT 기반 운영체제    
    case VER_PLATFORM_WIN32_NT:        
    /*                   
    dwMajorVersion, dwMinorVersion 멤버로 운영체제 구분        
    ex)             
        if(osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 0) version = "vista";            
        if(osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 1) version = "window 7";                    
    ...        
    */        
    break;
}

- 윈도우 NT 4.0 SP6 보다 낮은 버전 os에서는 OSVERSIONINFO 구체를 사용해야함.

 
OSVERSIONINFOEX osvi;

ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);

// 윈도우 NT 4.0 SP6 이하 윈도우라면 FALSE == 윈도우 버전이 낮음
if(!GetVersionEx((OSVERSIONINFO *)&osvi))
{
    // OSVERSIONINFO로 재설정
    osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
}

switch(osvi.dwPlatformId){
    // 윈도우즈 9x 기반의 운영체제인 경우
    case VER_PLATFORM_WIN32_WINDOWS:
        /*
        if(osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0) version = "window 95";
        else if(osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10) version = "window 98";
        else if(osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90) version = "window ME";
        */
        break;
}
 

 

[Major/Minor Chart]

 

[표 출처]

https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms724833(v=vs.85).aspx

728x90
반응형
728x90
반응형

1. 코드

// 현재 프로세스 비트 구분
#if defined(_WIN64)
    return TRUE;
#else
    return FALSE;
#endif

// 운영체제 = 64bit, 프로세스 = 32bit 일 경우 TRUE
BOOL IsCurrentProcessWow64()
{
    BOOL bIsWow64 = FALSE;
    typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS)(HANDLE, PBOOL);
    LPFN_ISWOW64PROCESS fnIsWow64Process;

    fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress(GetModuleHandle(TEXT("kernel32")), "IsWow64Process");
    if (!fnIsWow64Process)
        return FALSE;

    return fnIsWow64Process(GetCurrentProcess(), &bIsWow64) && bIsWow64;
}

// 프로세스의 bit에 상관없이 운영체제의 비트 확인 가능
// 프로세스 = 64 -> os = 64
// 프로세스 = 32 -> WOW64 조사 -> TRUE = 64, FALSE = 32
BOOL Is64BitWindows()
{
    if (IsCurrentProcess64bit())
        return TRUE;

    return IsCurrentProcessWow64();
}

 

2. 참고

 - WOW64 (Windows On Windows 64-bit) : 64비트 운영체제에서 32비트 프로세스가 동작하게 만들어주는 서브시스템

 

3. 출처

 - http://www.devpia.com/Maeul/Contents/Detail.aspx?BoardID=51&MAEULNO=20&no=8704&page=3

728x90
반응형
728x90
반응형

1. 설명

- 현재 프로세스 정보

DWORD pid;
HANDLE hdl;

pid = GetCurrentProcessId();
hdl = OpenProcess(MAXIMUM_ALLOWED, FALSE, pid);

 

- 다른 프로세스 정보

HWND hWnd;
DWORD pid;
HANDLE hdl;

// 윈도우 이름으로 윈도우 핸들을 얻음.
hWnd = FindWindow(NULL, L"Window Name");
// hWnd의 pid값 구하기
GetWindowThreadProcessId(hWnd, &pid);
// 얻은 pid값으로 대상 프로세스의 핸들을 얻음.
hdl = OpenProcess(MAXIMUM_ALLOWED, FALSE, pid);
 

- 여러 프로세스 정보

#include "tlhelp32.h"

HANDLE hSnapShot = INVALID_HANDLE_VALUE;
PROCESSENTRY32 pe;

// 스냅샷
pe.dwSize = sizeof( PROCESSENTRY32 );
hSnapShot = CreateToolhelp32Snapshot( TH32CS_SNAPALL, NULL );

// 프로세스 목록의 끝까지 반복
Process32First(hSnapShot, &pe);
do
{
    // PROCESSENTRY32 구조체를 이용하여 프로세스 정보 획득 가능
}
while(Process32Next(hSnapShot, &pe));

CloseHandle(hSnapShot);

 

2. PROCESSENTRY32 구조체
typedef struct tagPROCESSENTRY32 {
  DWORD     dwSize;
  DWORD     cntUsage;
  DWORD     th32ProcessID; // PID
  ULONG_PTR th32DefaultHeapID;
  DWORD     th32ModuleID;
  DWORD     cntThreads; // 프로세스 내부의 쓰레드 개수
  DWORD     th32ParentProcessID; // 부모 프로세스 ID
  LONG      pcPriClassBase;
  DWORD     dwFlags;
  TCHAR     szExeFile[MAX_PATH]; // 프로세스 실행 경로
} PROCESSENTRY32, *PPROCESSENTRY32;
 
728x90
반응형
728x90
반응형

1. 코드

HANDLE hFile;
OPENFILENAME OFN;
TCHAR lpstrFile[MAX_PATH] = L"";

// 필요한 부분에 아래 내용 사용
memset(&OFN, 0, sizeof(OPENFILENAME));

OFN.lStructSize = sizeof(OPENFILENAME);
OFN.hwndOwner=hWnd;
OFN.lpstrFilter=TEXT("ALL FILE(*.*)\0*.*\0");
OFN.lpstrFile=lpstrFile;
OFN.nMaxFile=MAX_PATH;

if(GetOpenFileName(&OFN) != 0) 
{
    hFile = CreateFile(OFN.lpstrFile, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    if(hFile == INVALID_HANDLE_VALUE)
    {
        MessageBox(hWnd, L"파일 안열림", L"Error", MB_OK);
    }
    else
    {
        MessageBox(hWnd, L"파일 열림", L"Open", MB_OK);
        CloseHandle(hFile);
    }
}

 

728x90
반응형
728x90
반응형

Property -> Linker -> Manifest File -> UAC Execution Level

728x90
반응형
728x90
반응형

ATL90.dll

[Project] Property -> General -> Use of ATL -> Static Link to ATL

 

 

MSVCR90.dll

[Project] Property -> C/C++ -> Code Generation -> Runtime Library -> /MT

단, Debug로 컴파일 할 경우에는 /MTd

 

728x90
반응형
728x90
반응형

1. 코드

#include<windows.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
HINSTANCE g_Inst;
LPCWSTR lpszClass = TEXT("Window");

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszClassParam, int nCmdShow)
{
    HWND hWnd;
    MSG Message;
    WNDCLASS WndClass;
    g_Inst = hInstance;

    WndClass.cbClsExtra=0;
    WndClass.cbWndExtra=0;
    WndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
    WndClass.hCursor=LoadCursor(NULL, IDC_ARROW);
    WndClass.hIcon=LoadIcon(NULL, IDI_APPLICATION);
    WndClass.hInstance=hInstance;
    WndClass.lpfnWndProc=WndProc;
    WndClass.lpszClassName=lpszClass;
    WndClass.lpszMenuName=NULL;
    WndClass.style=CS_HREDRAW|CS_VREDRAW;

    RegisterClass(&WndClass);

    hWnd=CreateWindow(lpszClass, lpszClass, WS_OVERLAPPEDWINDOW
    	, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT
        , NULL, (HMENU)NULL, hInstance, NULL);
    ShowWindow(hWnd,nCmdShow);

    while(GetMessage(&Message, NULL, 0, 0))
    {
        TranslateMessage(&Message);
        DispatchMessage(&Message);
    }
    return (int)Message.wParam;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{

    switch(iMessage)
    {
        case WM_DESTROY:
            PostQuitMessage(0);
            return 0;
    }
    return DefWindowProc(hWnd, iMessage, wParam,lParam);
}

 

728x90
반응형

+ Recent posts