随笔分类 -  Windows程序设计

摘要:IAT表详解 IAT的全称是Import Address Table。 IAT表是执行程序或者dll为了实现动态加载和重定位函数地址,用到的一个导入函数地址表。这里面记录了每个导入函数的名字和所在的dll名称,在pe加载的时候系统会加载这些dll到用户的地址空间然后把函数地址覆盖这个表里的函数地址, 阅读全文
posted @ 2017-09-23 14:36 gd_沐辰 阅读(6976) 评论(0) 推荐(1)
摘要:1、 DLL的概念 DLL(Dynamic Linkable Library),动态链接库,可以向程序提供一些函数、变量或类。这些可以直接拿来使用。 静态链接库与动态链接库的区别: (1)静态链接库与动态链接库都是共享代码的方式。静态链接库把最后的指令都包含在最终生成的EXE文件中了;动态链接库不必 阅读全文
posted @ 2017-09-23 14:35 gd_沐辰 阅读(4813) 评论(0) 推荐(1)
摘要:检查程序是否是PE文件 说明: 判断一个文件是否是PE文件。本例主要判断DOS头,NT头。利用两种方式进行判断,一种是WIN32的函数;另一种是MFC的方法。但是思路是一致的。 PE结构适用于windows系统的程序,即.exe。 PE(Portable Execute)文件是Windows下可执行 阅读全文
posted @ 2017-09-08 19:55 gd_沐辰
摘要:MySpy++ 说明: 本例利用MFC模仿VS编译器的SPY++,通过捕捉工具,随着光标的移动可以获取到当前窗口的句柄、标题、类名、尺寸。 最终结果: 步骤: 1.打开资源视图-》Dialog,对对话框进行如下修改。 解析: “搜索条件”是组合框,Group Box,可以任意拖动,选定包含区域。 “ 阅读全文
posted @ 2017-09-08 19:49 gd_沐辰 阅读(1334) 评论(0) 推荐(0)
摘要:/*对两个线程进行轮流操作。 一个线程输出1-100 第二个线程输出101-200结果:1 101 2 102 。。。。。。。*/ 第一种情况: 可以看出,以上的操作只是普通的输出,而且是按1-200输出。 第二种情况: hThead[0] = CreateThread(nullptr, 0, Th 阅读全文
posted @ 2017-06-27 23:51 gd_沐辰 阅读(2969) 评论(0) 推荐(0)
摘要:当一个线程启动时,会做什么操作:1.创建内核对象2.使用计数3.ExitCode4.Signaled5.Context 线程上下文 存储了CPU的当前状态 IP(指令寄存器)\SP(栈寄存器)6.线程去进程当中申请一块内存,作为当前线程的栈6.线程将lParam、lpStarAddress(线程的入 阅读全文
posted @ 2017-06-27 23:49 gd_沐辰
摘要:线程与线程之间也是互相独立的,互不干扰的。由于每一线程都有自己的堆栈,所以一个线程在一定条件下可以访问另一个线程。 线程是指程序的一个指令执行序列,WIN32 平台支持多线程程序,允许程序中存在多个线程。 在单 CPU 系统中,系统把 CPU 的时间片按照调度算法分配给各个线程,因此各线程实际上是分 阅读全文
posted @ 2017-06-20 20:11 gd_沐辰 阅读(129) 评论(0) 推荐(0)
摘要:所在目录:当前程序运行的目录。比如:在VS调试程序时,所在目录就是源文件所在的目录。在debug直接运行.exe是,所在目录就是debug所在的目录。 GetCurrentDirectory();获取所在目录。 函数原型:DWORDGetCurrentDirectory( DWORD nBuffer 阅读全文
posted @ 2017-06-20 20:10 gd_沐辰 阅读(362) 评论(0) 推荐(0)
摘要:程序、进程、线程的关系:以一个比喻来说明:程序就好比一间工厂的蓝图、设计图;进程就是这间工厂的实体;线程就是这间工厂的员工。 结论:由此可以看出,进程(工厂)是静态的,任何操作都是由线程(员工)去完成。注意:进程与进程之间是互相独立的,互不干扰的。同理,线程与线程之间也是互相独立的,互不干扰的。(进 阅读全文
posted @ 2017-06-20 20:07 gd_沐辰 阅读(1879) 评论(0) 推荐(0)
摘要:众所周知,UAC是User Account Control的缩写,其中文翻译为用户帐户控制,其含义可定义为权限令牌。 那么UAC的作用是什么?在计算机扮演一个怎样的角色? 首先,在开始这里输入'UAC'就会出现以下这个界面 从上图可以看到,是一个权限的界面,按程度分“始终提醒” “从不提醒”。 还有 阅读全文
posted @ 2017-06-20 15:05 gd_沐辰 阅读(413) 评论(0) 推荐(0)
摘要:IO完成端口也是一个内核对象。调用以下函数创建IO完成端口内核对象。 函数参数: hFile 就是设备句柄。 hExistingCompletionPort 是与设备关联的IO完成端口句柄。为NULL时,系统会创建新的完成端口。 dwCompletionKey 是一个对我们有意义的值,但是操作系统并 阅读全文
posted @ 2017-06-11 23:35 gd_沐辰 阅读(690) 评论(0) 推荐(0)
摘要:参数说明: HANDLE hFile 文件句柄 注意:如果文件打开方式没有指明FILE_FLAG_OVERLAPPED的话,当程序调用成功时,它将实际写入文件的字节数保存到lpNumberOfBytesWriten指明的地址空间中 LPCVOID lpBuffer 数据缓存区指针 指针,指向将写入文 阅读全文
posted @ 2017-05-29 18:48 gd_沐辰 阅读(5411) 评论(0) 推荐(0)
摘要:ReadFile:从文件指针指向的位置开始将数据读出到一个文件中, 且支持同步和异步操作。与fread函数相比,这个函数要明显灵活的多。该函数能够操作通信设备、管道、套接字以及邮槽。 参数说明: HANDLE hFile 文件的句柄 需要读入数据的文件指针,这个指针指向的文件必须是GENERIC_R 阅读全文
posted @ 2017-05-29 18:45 gd_沐辰 阅读(3517) 评论(0) 推荐(0)
摘要:CreateFile:一个多功能的函数,打开或创建以下对象,并返回可访问的句柄:控制台,通信资源,目录(只读打开),磁盘驱动器,文件,邮槽,管道。并返回一个可以用来访问这些对象的句柄。 注意:CreateFile的涵义是创建File这个内核对象,而不是创建物理磁盘上的“文件”。在Win32 API中 阅读全文
posted @ 2017-05-29 18:40 gd_沐辰 阅读(663) 评论(0) 推荐(0)
摘要:什么是内核对象? C++中 类有类的对象,对象有权限访问类中的方法和属性。同理,Windows也自己的类,但不是公开的。可以通过调用函数创建这些不公开类的对象对Windows进行操作。而产生的对象,就称为内核对象。 内核对象的基本概念: Windows系统是非开源的,它提供给我们的接口是用户模式的, 阅读全文
posted @ 2017-05-29 18:27 gd_沐辰 阅读(342) 评论(0) 推荐(0)
摘要:Windows API分类 1.基础服务:文件系统、外部设备、进程、线程、注册表、错误处理机制。 文件系统:比如C语言的fopen文件系统会调用windows的文件系统。 进程是操作系统的单位。代表正在运行的程序。 2.图形设备接口(GDI) 输出图形内容到显示器、打印机。 做界面<-因为Windo 阅读全文
posted @ 2017-05-15 20:12 gd_沐辰 阅读(447) 评论(0) 推荐(0)