- Visual Studio使用
- 资源管理器简介
- 头文件
后缀名为.h或.hpp的文件,例如example.h。
包含类、结构体、函数的声明、宏定义和类型定义等。
通常用于存放函数原型、类的声明、常量定义和类型别名等。
头文件中通常不包含具体的函数或类的实现代码,只包含函数或类的声明和相关信息。
头文件的目的是提供接口和声明,以便在源文件中使用。
2.源文件
后缀名为.cpp的文件,例如example.cpp。
包含函数和类的具体实现代码。
实现了头文件中声明的函数或类的具体定义。
源文件中可以包含全局变量、局部变量、函数定义、类成员函数的实现等。
3.头文件和源文件的区别
头文件提供了函数和类的声明,通常被多个源文件共享,而源文件提供了它们的实现。
头文件的作用是实现代码的模块化和重用,避免重复编写代码。
源文件包含了头文件中声明的函数和类的具体实现,它们一起构成了一个完整的程序。
一、Windows API
双击函数,按F1键即可跳转相应函数文档。
- MessageBox
函数原型:
int MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType);
函数参数:
@hWnd:代表消息框拥有的窗口,如果为NULL,表示消息框没有拥有窗口。
@lpText:消息框中的内容。
@lpCaption:消息框的标题。
@uType:指定消息框的内容和行为的位标志集,指定消息框中的按钮以及图标。
函数作用:
显示消息对话框,该消息对话框包括一个系统图标、一组按钮和一个简短的消息。返回值是一个整数,指示用户单击了哪个按钮
函数调试:
使用不同参数,运行结果如下:
2.CreateThread
函数原型:
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,
SIZE_T dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
__drv_aliasesMem LPVOID lpParameter,
DWORD dwCreationFlags,
LPDWORD lpThreadId
);
函数参数:
lpThreadAttributes:一个指向 SECURITY_ATTRIBUTES 结构体的指针,指定了新的程对象的安全特性。若为NULL,则新的线程对象不能被继承。
dwStackSize:指定新线程的堆栈大小。如果为0,则使用默认堆栈大小。
lpStartAddress:一个指向线程函数的指针,表示新线程的入口点。
lpParameter:传递给线程函数的参数。
dwCreationFlags:指定了线程创建的标志位。可以为以下值之一或它们的组合:
0:线程立即启动并运行。
CREATE_SUSPENDED:线程被创建挂起,不立即运行。
lpThreadId:一个指向 DWORD 变量的指针,接收新线程的 ID。
函数作用:
用于创建一个新的命名或未命名的信号量对象。它可以被用于控制多个线程对共享资源的访问。
函数调试:
3.CreateProcessA
函数原型:
BOOL CreateProcessA(
LPCSTR lpApplicationName,
LPSTR lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCSTR lpCurrentDirectory,
LPSTARTUPINFOA lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation
);
函数参数:
lpApplicationName:是可执行文件的名称,该名称可以是带完整路径;也可以是只 有名称,这种情况下只能在当前路径下查找。需要注意的是,文件名一定要有后 缀.exe。
lpCommandLine:当lpApplicationName 设置为NULL时,可执行程序文件名由 lpCommandLine中的第一空格作为界定符。空格后面才是执行参数。
函数作用:
用于创建子进程。
函数调试:
二、Unicode编码
用printf函数输出时使用不同的格式只是输出时解码方式不同,例如%d是输出数字67,%c是在ask码表中查找67所代表的字符,输出此字符,如下图:
但是不同的地区所使用的编解码表不同,例如上述的67在一个编解码表中代码“a”,而在另一个编解码表中代表“f”,为了统一,便出现了Unicode。
Unicode是一种全球标准的字符编码系统,用于表示几乎所有语言的文字。 它解决了不同字符编码标准之间的兼容性问题,使得计算机可以处理和交换多种语言的文本。Unicode通过为每种语言的字符分配唯一的编码,实现了跨语言、跨平台的文本转换和语言交流。这种编码标准不仅包括世界上几乎所有语言的文字,还支持数学符号和技术字符,满足了国际交流和计算机处理文本的广泛需求。
三、杀软
- 分类
(1)静态查杀:一般根据特征码识别,然后对文件进行特征匹配。
(2)行为查杀(动态查杀):主要是对其产生的行为进行检测。
(3)云查杀:提取出文件的特征和上传云端,云端进行检测后返回客户端,对对应病毒进行查杀。
3.软件
(1)火绒
(2)360
(3)ESET
(4)Kaspersky Antivirus卡巴斯基
(5)赛门铁克
(6)猎鹰
四、心得体会
今天在实习中学习了一些关于Visual Studio环境中头文件和源文件的区别,以及三个Windows API函数:MessageBox、CreateThread和CreateProcessA,还有Unicode编码。下午的学习内容包括杀毒软件如火绒、360等的静态和动态查杀方法。
首先,学习头文件和源文件的区别让我更加深入地了解了C/C++编程语言的结构和组织方式。头文件用于声明函数、变量和宏定义,源文件则包含实际的代码实现。这种分离的设计有助于提高代码的可维护性和可读性,同时也方便了模块化开发。
在学习Windows API函数时,我了解到MessageBox函数用于弹出消息框,CreateThread函数用于创建新线程,CreateProcessA函数用于创建新进程。这些函数是Windows操作系统提供的重要接口,可以帮助我们实现各种功能和操作。同时,学习Unicode编码让我意识到在处理多语言和特殊字符时,选择合适的编码方式非常重要,避免出现乱码和不兼容的情况。下午的学习内容围绕着杀毒软件展开,静态查杀和动态查杀是杀毒软件常用的两种检测方法。静态查杀是基于特征码和规则库进行检测,适用于已知病毒和恶意软件的识别;动态查杀则是通过行为分析和沙箱技术检测未知威胁,具有更高的检测率和灵活性。
通过今天的学习和实践,我对计算机编程和信息安全领域有了更深入的了解,也意识到自己在这些领域还有很多需要学习和提升的地方。希望在未来的学习和工作中能够不断积累经验,不断提升自己的能力,为未来的发展打下坚实的基础。