Windows 자동 실행 위치  

DiamondCS 에서 제공하는 Autostart Guard, Autostart Viewer 프로그램이 모니터링하는 Windows 자동 실행 위치의 리스트 입니다.

웜, 바이러스 등에 감염되었을 때 한번쯤 살펴봐야 할 곳들이죠.


Autostart Locations are listed in no particular order.


Registry Autostart Locations

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run\
All values in this key are executed.

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce\
All values in this key are executed, and then their autostart reference is deleted.

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices\
All values in this key are executed as services.

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce\
All values in this key are executed as services, and then their autostart reference is deleted.

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\
All values in this key are executed.

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce\
All values in this key are executed, and then their autostart reference is deleted.

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce\Setup\
Used only by Setup. Displays a progress dialog box as the keys are run one at a time.

HKEY_USERS\.Default\Software\Microsoft\Windows\CurrentVersion\Run\
Similar to the Run key from HKEY_CURRENT_USER.

HKEY_USERS\.Default\Software\Microsoft\Windows\CurrentVersion\RunOnce\
Similar to the RunOnce key from HKEY_CURRENT_USER.

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon
The "Shell" value is monitored. This value is executed after you log in.

HKEY_LOCAL_MACHINE\Software\Microsoft\Active Setup\Installed Components\
All subkeys are monitored, with special attention paid to the "StubPath" value in each subkey.

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\
All subkeys are monitored, with special attention paid to the "StaticVXD" value in each subkey.

HKEY_CURRENT_USER\Control Panel\Desktop
The "SCRNSAVE.EXE" value is monitored. This value is launched when your screen saver activates.

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager
The "BootExecute" value is monitored. Files listed here are Native Applications that are executed before Windows starts.

HKEY_CLASSES_ROOT\vbsfile\shell\open\command\
Executed whenever a .VBS file (Visual Basic Script)  is run.

HKEY_CLASSES_ROOT\vbefile\shell\open\command\
Executed whenever a .VBE file (Encoded Visual Basic Script) is run.

HKEY_CLASSES_ROOT\jsfile\shell\open\command\
Executed whenever a .JS file (Javascript) is run.

HKEY_CLASSES_ROOT\jsefile\shell\open\command\
Executed whenever a .JSE file (Encoded Javascript) is run.

HKEY_CLASSES_ROOT\wshfile\shell\open\command\
Executed whenever a .WSH file (Windows Scripting Host) is run.

HKEY_CLASSES_ROOT\wsffile\shell\open\command\
Executed whenever a .WSF file (Windows Scripting File) is run.

HKEY_CLASSES_ROOT\exefile\shell\open\command\
Executed whenever a .EXE file (Executable) is run.

HKEY_CLASSES_ROOT\comfile\shell\open\command\
Executed whenever a .COM file (Command) is run.

HKEY_CLASSES_ROOT\batfile\shell\open\command\
Executed whenever a .BAT file (Batch Command) is run.

HKEY_CLASSES_ROOT\scrfile\shell\open\command\
Executed whenever a .SCR file (Screen Saver) is run.

HKEY_CLASSES_ROOT\piffile\shell\open\command\
Executed whenever a .PIF file (Portable Interchange Format) is run.

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\
Services marked to startup automatically are executed before user login.

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Winsock2\Parameters\Protocol_Catalog\Catalog_Entries\
Layered Service Providers, executed before user login.

HKEY_LOCAL_MACHINE\System\Control\WOW\cmdline
Executed when a 16-bit Windows executable is executed.

HKEY_LOCAL_MACHINE\System\Control\WOW\wowcmdline
Executed when a 16-bit DOS application is executed.

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit
Executed when a user logs in.

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\ShellServiceObjectDelayLoad\
Executed by explorer.exe as soon as it has loaded.

HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows\run
Executed when the user logs in.

HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows\load
Executed when the user logs in.

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\run\
Subvalues are executed when Explorer initialises.

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\run\
Subvalues are executed when Explorer initialises.


Folder Autostart Locations

windir\Start Menu\Programs\Startup\
User\Startup\
All Users\Startup\
windir\system\iosubsys\
windir\system\vmm32\
windir\Tasks\

File Autostart Locations

c:\explorer.exe  
c:\autoexec.bat
c:\config.sys
windir\wininit.ini
windir\winstart.bat
windir\win.ini - [windows] "load"
windir\win.ini - [windows] "run"
windir\system.ini - [boot] "shell"
windir\system.ini - [boot] "scrnsave.exe"
windir\dosstart.bat
windir\system\autoexec.nt
windir\system\config.nt

'컴퓨터' 카테고리의 다른 글

아파치 재시작  (0) 2011.12.14
콘솔 리다이렉션  (0) 2011.12.09
리눅스 하위 폴더 용량 확인  (0) 2010.12.17
hosts파일 [ 윈도우 내부 DNS -> IP ]  (0) 2010.12.15
리눅스 커널 버전확인  (0) 2010.06.27


특정 도메인의 IP를 조작한다

C:\WINDOWS\system32\drivers\etc\hosts

안에

xxx.xxx.xxx.xxx dns.dns.dns

127.0.0.1       activate.adobea.com
74.208.101.249 gs.applea.com

위와같이 필요한것들을 적어준다

라고 적어주심 ㅇㅋ

'컴퓨터' 카테고리의 다른 글

아파치 재시작  (0) 2011.12.14
콘솔 리다이렉션  (0) 2011.12.09
리눅스 하위 폴더 용량 확인  (0) 2010.12.17
Windows 자동 실행 위치  (0) 2010.12.15
리눅스 커널 버전확인  (0) 2010.06.27


컴파일러 옵션 범주별 목록

다음은 범주별로 나열한 포괄적인 컴파일러 옵션 목록입니다. 사전순으로 나열된 목록을 보려면 컴파일러 옵션 사전순 목록을 참조하십시오.

최적화

옵션 용도
/O1 작은 코드를 만듭니다.
/O2 빠른 코드를 만듭니다.
/Oa 별칭 없음으로 가정합니다.
/Ob 인라인 확장을 제어합니다.
/Od 최적화를 사용하지 않습니다.
/Og 전역 최적화를 사용합니다.
/Oi 내장 함수를 생성합니다.
/Op 부동 소수점 일치를 향상시킵니다.
/Os 코드 크기를 우선으로 합니다.
/Ot 코드 속도를 우선으로 합니다.
/Ow 함수 호출에 별칭을 가정합니다.
/Ox 최대 최적화(/Ob1gity /Gs)를 사용합니다.
/Oy 프레임 포인터를 생략합니다.

코드 생성

옵션 용도
/arch 코드 생성 시 SSE 또는 SSE2 명령을 사용합니다.
/clr Managed Extensions for C++를 사용하고 공용 언어 런타임에서 실행할 출력 파일을 생성합니다.
/EH 예외 처리 모델을 지정합니다.
/G3 386 프로세서에 맞게 코드를 최적화합니다. Visual C++ 5.0에서 사용하면 컴파일러가 이 옵션을 무시합니다.
/G4 486 프로세서에 맞게 코드를 최적화합니다. Visual C++ 5.0에서 사용하면 컴파일러가 이 옵션을 무시합니다.
/G5 Pentium에 맞게 코드를 최적화합니다.
/G6 Pentium Pro, Pentium II 및 Pentium III 프로세서에 맞게 코드를 최적화합니다.
/G7 Pentium 4 또는 Athlon 프로세서에 맞게 코드를 최적화합니다.
/GB /G6와 동일하며 _M_IX86 값을 600으로 설정합니다.
/Gd __cdecl 호출 규칙을 사용합니다.
/Ge 스택 조사를 활성화합니다.
/GF
/Gf
문자열 풀링을 사용합니다.
/Gh 후크 함수 _penter를 호출합니다.
/GH 후크 함수 _pexit을 호출합니다.
/GL 전체 프로그램 최적화를 사용합니다.
/Gm 최소 재빌드를 사용합니다.
/GR RTTI(런타임 형식 정보)를 사용합니다.
/Gr __fastcall 호출 규칙을 사용합니다.
/Gs 스택 조사를 제어합니다.
/GT 정적 스레드 로컬 저장소를 사용하여 할당한 데이터의 파이버 안전을 지원합니다.
/GX 동기 예외 처리를 사용합니다.
/Gy 함수 수준 링크를 사용합니다.
/Gz __stdcall 호출 규칙을 사용합니다.
/MD MSVCRT.lib를 사용하여 다중 스레드 DLL을 만듭니다.
/MDd MSVCRTD.lib를 사용하여 디버그 다중 스레드 DLL을 만듭니다.
/ML LIBC.lib를 사용하여 단일 스레드 실행 파일을 만듭니다.
/MLd LIBCD.lib를 사용하여 디버그 단일 스레드 실행 파일을 만듭니다.
/MT LIBCMT.lib를 사용하여 다중 스레드 실행 파일을 만듭니다.
/MTd LIBCMTD.lib를 사용하여 디버그 다중 스레드 실행 파일을 만듭니다.

출력 파일

옵션 용도
/FA
/Fa
목록 파일을 만들고
목록 파일 이름을 설정합니다.
/Fd 프로그램 데이터베이스 파일 이름을 바꿉니다.
/Fe 실행 파일 이름을 바꿉니다.
/Fm 맵파일을 만듭니다.
/Fo 개체 파일을 만듭니다.
/Fp 미리 컴파일된 헤더 파일 이름을 지정합니다.
/FR
/Fr
브라우저 파일을 생성합니다.
/Fx 삽입된 코드와 소스 파일을 병합합니다.

디버깅

옵션 용도
/GS 보안 검사를 버퍼링합니다.
/GZ /RTC1과 동일합니다.
/RTC 런타임 오류 검사를 사용합니다.
/Wp64 64비트 이식성 문제를 검색합니다.
/Yd 모든 개체 파일에 완전한 디버깅 정보를 저장합니다.
/Yl 디버그 라이브러리를 만들 때 PCH 참조를 삽입합니다.
/Z7 C 7.0 호환 디버깅 정보를 생성합니다.
/Zd 줄 번호를 생성합니다.
/Zi 완전한 디버깅 정보를 생성합니다.

전처리기

옵션 용도
/AI #using 지시문에 전달된 파일 참조를 확인하기 위해 검색할 디렉터리를 지정합니다.
/C 전처리하는 동안 주석을 유지합니다.
/D 상수와 매크로를 정의합니다.
/E 전처리기 출력을 표준 출력에 복사합니다.
/EP 전처리기 출력을 표준 출력에 복사합니다.
/FI 지정된 포함 파일을 전처리합니다.
/FU 파일 이름이 #using 지시문에 전달된 것처럼 사용되도록 합니다.
/I 포함 파일의 디렉터리를 검색합니다.
/P 전처리기 출력을 파일에 씁니다.
/U 미리 정의된 매크로를 제거합니다.
/u 미리 정의된 모든 매크로를 제거합니다.
/X 표준 포함 디렉터리를 무시합니다.
/ZI 편집하며 계속하기와 호환되는 프로그램 데이터베이스에 디버깅 정보를 포함합니다.

언어

옵션 용도
/vd 숨겨진 vtordisp 클래스 멤버를 사용하거나 사용하지 않습니다.
/vmb 멤버의 포인터에 best case를 사용합니다.
/vmg 멤버의 포인터에 full generality를 사용합니다.
/vmm 다중 상속을 선언합니다.
/vms 단일 상속을 선언합니다.
/vmv 가상 상속을 선언합니다.
/Za 언어 확장을 사용하지 않습니다.
/Zc /Ze에서 표준 동작을 지정합니다.
/Ze 언어 확장을 사용합니다.
/Zg 함수 프로토타입을 생성합니다.
/Zl .obj 파일에서 기본 라이브러리 이름을 제거합니다.
/Zpn 구조체 멤버를 넣습니다.
/Zs 구문만 확인합니다.

링크

옵션 용도
/F 스택 크기를 설정합니다.
/LD DLL(동적 연결 라이브러리)을 만듭니다.
/LDd 디버그 DLL(동적 연결 라이브러리)을 만듭니다.
/link 지정된 옵션을 LINK에 전달합니다.
/MD MSVCRT.lib을 사용하여 컴파일함으로써 다중 스레드 DLL을 만듭니다.
/MDd MSVCRTD.lib로 컴파일하여 디버그 다중 스레드 DLL을 만듭니다.
/ML LIBC.lib를 사용하여 컴파일함으로써 단일 스레드 실행 파일을 만듭니다.
/MLd LIBCD.lib를 사용하여 컴파일함으로써 디버그 단일 스레드 실행 파일을 만듭니다.
/MT LIBCMT.lib를 사용하여 컴파일함으로써 다중 스레드 실행 파일을 만듭니다.
/MTd LIBCMTD.lib를 사용하여 컴파일함으로써 디버그 다중 스레드 실행 파일을 만듭니다.

미리 컴파일된 헤더

옵션 용도
/Y- 현재 빌드에서 미리 컴파일된 다른 모든 헤더 컴파일러 옵션을 무시합니다.
/Yc 미리 컴파일된 헤더 파일을 만듭니다.
/Yd 모든 개체 파일에 완전한 디버깅 정보를 저장합니다.
/Yu 빌드하는 동안 미리 컴파일된 헤더 파일을 사용합니다.
/YX 미리 컴파일된 헤더를 자동화합니다.

기타

옵션 용도
@ 지시 파일을 지정합니다.
/? 컴파일러 옵션을 나열합니다.
/c 링크하지 않고 컴파일합니다.
/H 외부 공개 이름의 길이를 제한합니다.
/HELP 컴파일러 옵션을 나열합니다.
/J 기본 char 형식을 변경합니다.
/nologo 초기 화면 배너를 표시하지 않습니다.
/QI0f Pentium 0F 명령에 문제가 없도록 합니다.
/QIfdiv 결함이 있는 FDIV, FPREM, FPTAN 및 FPATAN 명령을 가진 Intel Pentium 마이크로프로세서 문제를 해결합니다.
/QIfist 부동 소수점 형식에서 정수 계열 형식으로 변환해야 할 때 도우미 함수 _ftol가 호출되지 않도록 합니다.
/showIncludes 컴파일하는 동안 전체 포함 파일의 목록을 표시합니다.
/Tc
/TC
C 소스 파일을 지정합니다.
/Tp
/TP
C++ 소스 파일을 지정합니다.
/V 버전 문자열을 설정합니다.
/W 경고 수준을 설정합니다.
/w 모든 경고를 사용하지 않습니다.
/Wall 기본적으로 비활성화되는 경고를 포함하여 모든 경고를 활성화합니다.
/WL 명령줄에서 C++ 소스 코드를 컴파일할 때 오류 및 경고 메시지에 한 줄 진단을 사용합니다.
/Zm 미리 컴파일된 헤더 메모리의 할당 제한을 지정합니다.

 

 

/MP 컴파일시 멀티 코어사용

'프로그래밍' 카테고리의 다른 글

아무것도 안하는함수  (0) 2011.08.10
비주얼 스튜디오 링크 순서 보이기  (0) 2011.08.09
mutable  (0) 2010.10.20
explicit  (0) 2010.10.20
ms vs에서 포인터 변수에 들어가있는 값의 비밀  (0) 2010.08.18

mutable

프로그래밍 2010. 10. 20. 22:19


#include <Turboc.h>

 

class Position

{

private:

     int x,y;

     char ch;

     mutable char info[256];

 

public:

     Position(int ax, int ay, char ach) { x=ax;y=ay;ch=ach; }

     void OutPosition() const { gotoxy(x, y);putch(ch); }

     void MoveTo(int ax, int ay) { x=ax; y=ay; }

     void MakeInfo() const { sprintf(info,"x=%d, y=%d, ch=%c",x,y,ch); }

     void OutInfo() const { puts(info); }

};

 

void main()

{

     const Position Here(11,22,'Z');

     Here.MakeInfo();

     Here.OutInfo();

}

 

 

Const 효과를 없에는 특정 변수설정

'프로그래밍' 카테고리의 다른 글

비주얼 스튜디오 링크 순서 보이기  (0) 2011.08.09
VS2008 컴파일러 옵션  (1) 2010.10.21
explicit  (0) 2010.10.20
ms vs에서 포인터 변수에 들어가있는 값의 비밀  (0) 2010.08.18
API 파일 처리 유용함수  (0) 2010.08.10

explicit

프로그래밍 2010. 10. 20. 22:17


01.class TestClass
02.{
03.public:
04.    TestClass(int nParam = 1) : m_Num(nParam)
05.    {
06.        std::cout << "생성자 호출" << std::endl;
07.    }
08.    ~TestClass(){}
09.  
10.private:
11.    int m_Num;
12.};
13.  
14.void main()
15.{
16.    TestClass TestObj1 = TestClass(1);
17.    TestClass TestObj2 = 2;
18.    TestClass TestObj3(3);
19.    TestObj1 = 4;
20.}


결과가 어떤가요?
main()함수에서 클래스를 이용한 객체생성은 3번만 수행했으며 마지막 4번째 줄에서는 맨 처음 선언했던 객체에 직접 int형 정수를 넣어주고 있지만 VisualStudio2008 C++컴파일러의 입장에서는 아무런 오류없이 컴파일이 되고 실행또한 잘 됩니다. 하지만 특이한 점은 클래스로 생성한 객체는 3개지만, 실행해보면 "생성자 호출" 이라는 문자열이 4번 출력되죠. 이 부분으로 보면 분명히 생성자 함수는 4번 호출되었다는 것을 알 수 있습니다.

여기서 주목해야 할 부분은 main()함수의 2번째, 4번째 줄인

1.TestClass TestObj2 = 2;

2.TestObj1 = 4;

이 부분입니다.
TestClass라는 클래스는 생성자의 매개변수로 int형 데이터를 받아오는 클래스로써 int형과 상호호환은 염두해두고 있지 않는 클래스입니다. 연산자 오버로딩도 하지 않았구요. 이 부분에 있어서 VisualStudio2008 C++컴파일러는 사용자의 편의를 위해 묵시적으로 변환하여 임시 객체 생성 후 해당 객체에 대입하게 됩니다.

explicit 키워드는 이럴 경우에 사용하는 것으로 명시적으로 생성자를 호출해야만 하는 상황이 아니면 절대 생성자를 호출해주지 않도록 해주는 것입니다. 그렇다면 똑같은 소스코드에 이 키워드를 삽입하면 어떻게 되는지 살펴보도록 하겠습니다.

아래의 소스를 보세요.

01.class TestClass
02.{
03.public:
04.    explicit    TestClass(int nParam = 1) : m_Num(nParam)
05.    {
06.        std::cout << "생성자 호출" << std::endl;
07.    }
08.    ~TestClass(){}
09.  
10.private:
11.    int m_Num;
12.};
13.  
14.void main()
15.{
16.    TestClass TestObj1 = TestClass(1);
17.    TestClass TestObj2 = 2;
18.    TestClass TestObj3(3);
19.    TestObj1 = 4;
20.}


위 소스를 컴파일 해보면 오류가 두개 발생합니다.
첫번째 오류는 TestClass TestObj2 = 2; 에서 int형에서 TestClass형으로 변환할 수 없다는 것이고,
두번째 오류는 TestObj1 = 4; 에서 TestClass에 속한 "=" 연산자 중 우변에 int형을 받는 것을 찾을 수 없다는 것입니다.

main()함수의 첫번째 줄과 두번째 줄은 정상적인 방법을 통한 객체생성 및 생성자 호출조건임을 알 수 있죠.

아주 불편해보이죠?
굳이 편한 묵시적 변환기능을 놔두고 왜 굳이 8글자나 더 써가며 explicit이라는 키워드를 사용하고, 또 여기서 동반되는 소스코드의 수정을 왜 하는지...
이러한 묵시적인 기능이 대형 프로젝트에서는 심각하지만 찾기 매우매우 어려운 버그를 동반할 가능성이 농후하기 때문입니다. 특히나 4번째 줄에 있는 TestObj1 = 4; 이 부분은 정말 말로 설명할래야 하기도 싫은 명백한 오류임에도 우리의 컴파일러는 친절히 컴파일을 해줍니다.

이것이 explicit 키워드의 역할입니다.

'프로그래밍' 카테고리의 다른 글

VS2008 컴파일러 옵션  (1) 2010.10.21
mutable  (0) 2010.10.20
ms vs에서 포인터 변수에 들어가있는 값의 비밀  (0) 2010.08.18
API 파일 처리 유용함수  (0) 2010.08.10
릴리즈 디버깅시 최적화 하는것 막기  (0) 2010.08.04