해보고 싶었지만...오랫동안 해보지 못했던...
마이크로소프트가 제공하는 컴파일러를 사용해서 윈도우 프로그램을 해보고 싶다는 욕구를 충족 시켜 줄만한 글인 듯 하다.
다음은 글 본문 임
"Visual Studio를 설치하지 않고 Windows에서 C ++ 프로젝트를 어떻게 구축 하나요?"라는 몇 가지 질문을 받았습니다. 이 비디오는 프로세스를 보여 주지만 몇 가지 간단한 단계만으로 설명해 줍니다:
- Windows SDK 다운로드 인스톨*
- Windows SDK 커맨드 프롬프트 실행**
- 프로젝트 폴더 찾아가기
- “vcupgrade <projectname>.vcproj” 실행
- “msbuild <projectname>.vcxproj” 실행
*인스톨러의 Windows Native Code Development 섹션이 체크되어 있어야 합니다.
** 가장 좋은 방법은 아니지만 프로젝트가 SDK에서 바로 빌드될 수 있음을 보여주고 싶어서 데모를 할 때 명령 프롬프트에 대한 권한을 높였습니다. 폴더를 내 데스크탑으로 복사했다면, 권한이 부여된 Windows SDK 커맨드 프롬프트를 실행 할 필요가 없었을 것입니다.
이 작업은 자신의 컴퓨터에서 자동화 된 빌드를 수행하거나 빌드 서버와 같이 Visual Studio가 필요로 하지 않는 컴퓨터에서 빌드를 수행해야 하는 경우에 유용한 것이지, Visual Studio를 통한 개발을 대신 할 수 있는 대체용 솔루션은 아닙니다.
Windows SDK를 사용하여 빌드하는 방법에 대한 자세한 내용은 Microsoft Windows SDK 블로그를 참조하십시오. Windows 개발자 센터에 대한 업데이트는 The See Also 블로그를 참조하십시오.
그럼 위의 내용을 바탕으로 한 번 개발 환경을 만들어 보기로 하자.
1. 설치하기
그럼 위의 내용을 바탕으로 우선 내 컴퓨터를 점검해 보도록 한다.
내 컴퓨터에서 필요 한 것은 다음과 같은 오류 메시지 비슷한 것을 만나면서부터 시작 될 것이다.
눈여겨 볼만한 메시지가 나온다. 여러가지 시행 착오 끝에
닷넷 4를 다운 받고, 설치 한다. 그 내용을 담고 있는 스택오버플로우 내용은 아래 링크에 있다.
설치하도록 한다.
그리고 난 다음 윈도우 SDK를 설치하도록 한다.
대표 설치 옵션은 아래와 같이 해 주면 될 듯하다.
2. 실행하기
3. 샘플 구동하기
C:\Program Files\Microsoft SDKs\Microsoft SDKs\Windows\v7.1\Samples
C:\Program Files\Microsoft SDKs\Microsoft SDKs\Windows\v7.1\Samples\begin\dll
실행 해보면,
무슨 오류 인지는 모르겠으나 일단 컴파일하고 빌드가 되는 것으로 보임.
한번 더 구동 해 주면 된다.
샘플은 구동하여 보았으니… 다음 함수를 넣어서 컴파일 해 보도록 한다.
사실 이 모든 것이 아래 함수등을 한번 구동해보고 싶어서 나온 욕심 일 수도 있다.
MinGW 환경은 사실 진짜 윈도우 환경은 아니라고 생각하니까...
void Disable_WFP() {
hmod=LoadLibrary("sfc_os.dll");
CPP SetSfcFileException;
// the function is stored at the fifth ordinal in sfc_os.dll
SetSfcFileException=(CPP)GetProcAddress(hmod,(LPCSTR)5);
SetSfcFileException(0, L"c:\\windows\\system32\\calc.exe",-1);
// Now we can modify the system file in a complete stealth.
}
위 함수에 대한 설명은 다음 사이트2에 있다.
이 함수로 뭘 할 수 있을 지 생각해보고 있는 중이다…
전체 코드는 다음과 같이 만들어 보았다. 사실 코드도 없지만....
그리고 이건 C++이 아님을 밝혀야 할 듯 그냥 C++ 컴파일러로 컴파일을 한것으로
정정하자...
#include "windows.h"
typedef DWORD(__stdcall *CPP) (DWORD param1, PWCHAR param2, DWORD param3);
void Disable_WFP() {
HANDLE hmod=LoadLibrary("sfc_os.dll");
CPP SetSfcFileException;
// the function is stored at the fifth ordinal in sfc_os.dll
SetSfcFileException=(CPP)GetProcAddress(hmod,(LPCSTR)5);
SetSfcFileException(0, L"c:\\windows\\system32\\calc.exe",-1);
// Now we can modify the system file in a complete stealth.
}
int main()
{
Disable_WFP();
return(0);
}
Makefile도 만들어 준다... 물론 샘플 디렉토리를 뒤져서 아무거나 맘에 드는 놈을 구해서 베끼고, 약간 수정 해 준 버전이다.
# Nmake macros for building Windows 32-Bit apps
!include <win32.mak>
all: $(OUTDIR) $(OUTDIR)\calc_wfp.exe
#----- If OUTDIR does not exist, then create directory
$(OUTDIR) :
if not exist "$(OUTDIR)/$(NULL)" mkdir $(OUTDIR)
# Update the object files if necessary
$(OUTDIR)\calc_wfp.obj: calc_wfp.c
$(cc) $(cflags) $(cvarsdll) $(cdebug) /Fo"$(OUTDIR)\\" /Fd"$(OUTDIR)\\" calc_wfp.c
$(OUTDIR)\calc_wfp.exe: $(OUTDIR)\calc_wfp.obj
$(link) $(linkdebug) -out:$(OUTDIR)\calc_wfp.exe $(OUTDIR)\calc_wfp.obj $(guilibsdll)
#--------------------- Clean Rule --------------------------------------------------------
# Rules for cleaning out those old files
clean:
$(CLEANUP)
컴파일하고
구동은 뭐… 안 해도 될 듯… 그래서 결론은 60초 동안 제어권을 얻어온다는 말인지는 확실치 않다.
음... 내가 알기로는 모든 개발이 다 될 수 있을 듯 하기는 한데..
설마 이걸로 윈도우
개발에 뛰어든다는 말을 하기에는 인생이 너무 짧을 수 있을 듯...
대신에, 한가지 말 할 수 있는 것은.. 강력한 툴은 만들 수 있지 않을까?
이상.
'프로그래밍' 카테고리의 다른 글
[JavaScript] URL 파라메터 얻기 (1) | 2023.03.10 |
---|---|
Load-time relocation of shared libraries (0) | 2023.03.09 |
[윈32 프로그래밍]이클립스와 Windows SDK 7으로 해보기 (0) | 2023.02.25 |
C# - Thread (0) | 2023.02.24 |
Mosquitto와 Paho 클라이언트라이브러리를 사용 (0) | 2023.02.22 |