知识汇总
OneTrianee
已经转到cnblogs,OneTrainee,研究二进制安全。csdn广告忒多了点烦人。
展开
-
win32 8.2 使用通用对话框
“打开”文件和“保存”文件对话框显示 “打开” 对话框的函数是 GetOpenFileName,显示“保存”文件对话的函数是 GetSaveFileName ,这两个对话框可以让用户选择 驱动器、目录、以及一个文件名(打开对话框还允许选择多个文件),但这两个对话框并不对文件进行任何操作,也就是说,它们进给用户提供一个同一界面来“选择”文件名,获取文件名以后,对程序的打开、读写等操作还需要...原创 2019-06-02 09:48:49 · 601 阅读 · 0 评论 -
win32 7.2 绘制图形 - 绘制图形
GDI图形绘制函数主要由绘制线条和填充区域两大类。绘制线条函数以当前画笔绘制线条;绘制填充区域函数以当前画笔绘制边线,并以当前画刷填充中间的区域。绘制线条函数大体了解:绘制线条的函数有画直线的LineTo,画多条直线的 Polyline 和 Polylineto,画贝塞尔曲线的PolyBezier 和 PolyBezerto,画弧线的 Arc 和 ArcTo。当前点:介绍:DC...原创 2019-05-30 11:25:35 · 546 阅读 · 0 评论 -
win32 7.2 绘制图形 - 绘制像素点
在 DC 上绘制像素点是绘图最基本的操作,使用方法是: SetPixel 函数在 hDC的 dwX,dwY 位置以 dwColor 为颜色画上一个像素点。如果需要获取某个像素点的颜色值,可以使用:应用场景与缺点:虽然绘画像素是最基本的绘图操作方法,但是在程序中一般很少使用 SetPixel 函数,因为它的开销太大了,只适合在需要少量绘画像素的地方,如果要绘画一个区域,那么最好使用画...原创 2019-05-30 09:08:46 · 1402 阅读 · 0 评论 -
win32 5.4 对话框 子窗口控件的通用使用方法
适用控件的窗口函数:由于子窗口控件实际上就是窗口,大部分窗口函数对它们都是适用的,如:EnableWindow 在灰化和允许状态之间切换。ShowWindow 在显示和隐藏之间切换。GetWindowText 和 SetWindowText 来改变上面文字。MoveWindow 改变窗口大小和移动位置。举例:“显示图片”复选框的隐藏和显示,就是用ShowWindow 函数,处...原创 2019-05-23 09:42:31 · 726 阅读 · 0 评论 -
win32 5.4 在对话框 子窗口控件的定义
介绍:子窗口控件是一些Windows预定义的类,他们实际上就是一个个以对话框为父窗口的子窗口。对成员来说,在对话框中使用它们的时候并不需手工去逐一创建,只需要在对话框中创建就可以了。“对话框管理器”会在初始对话框的时候,根据定义语句自动创建所有窗口子窗口控件的定义:一般定义语法:各类元素介绍:文本:控件的初始化值ID:子窗口相对话框过程发送WM_COMMAND 中用的...原创 2019-05-23 09:01:15 · 380 阅读 · 0 评论 -
win32 7.1 GDI程序的结构
初步介绍: 这个主要说明,when:什么时间,什么时刻,最适合来进行GDI操作已经其中的处理机制。客户区的刷新:在DOS系统上:在DOS操作系统中变成的时候,程序把文字或图形输出到屏幕上,在输出新的内容之前,这些内容总是保留在屏幕原处,这些内容总是保留在屏幕原处。这些内容会被意外覆盖的唯一情况是激活一个TSR程序,但在TSR程序在退出之前有义务恢复原来的屏幕,如果它无法恢复屏幕的...原创 2019-05-27 10:48:33 · 208 阅读 · 0 评论 -
win32 7.1 GDI 基本原理介绍:
GDI:图形设备接口GDI(Graphics Device Interface)是Win32的重要组成部分,其作用是允许Windows的应用程序将图形输出到计算机屏幕、打印机或其他设备上。GDI实际上是一个函数库,包括直线、图画和字体处理等几百个函数。GDI的意义:GDI的意义在于将程序对图形界面的操作和硬件设备隔离开来,在程序中可以将所有的图形设备都看成虚拟设备,包括视频显示器和打印机等...原创 2019-05-27 08:33:52 · 731 阅读 · 0 评论 -
Windows 窗口过程 与 窗口退出机制
Windows的窗口过程汇编代码:;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>...原创 2019-05-17 11:47:19 · 768 阅读 · 0 评论 -
Windows 消息循环 GetMessage() PeekMessage()
GetMessage()函数的消息循环的汇编代码.while TRUE invoke GetMessage,addr @stMsg,NULL,0,0 .break .if eax == 0 invoke TranslateMessage,addr @stMsg invoke DispatchMessage,addr @stMsg .endw ret解读:调...原创 2019-05-17 11:12:45 · 2024 阅读 · 0 评论 -
win32 5.4 使用对话框
我们在之前 《对话框的简介》 中有过对对话框的介绍:代码详细介绍:创建 模态对话框 的函数: DialogBoxParam( ) 创建 非模态对话框 函数:CreateDialogParam( )两者区别:这里直接看下面介绍就好,做到大体了解,需要创建时再查阅资料。对话框过程:Windows在“对话框管理器” - 也就是为对话框内建的窗口过程中处理对话框消息,在处理前会首先调用...原创 2019-05-21 19:56:40 · 239 阅读 · 0 评论 -
win32 5.4 对话框 使用单选钮和复选框
初步介绍:单选钮:单选钮是互斥的选择钮,同一组的多个单选钮是能有一个按钮选中,单选钮的外形是一个圆圈的标记加文本。复选框:复选框不是互斥的,多个复选框的状态不会相互影响,复选框的外形是一个方框加上文本。函数介绍:按钮的检测:无论 单选钮 还是 复选框,其控件都是基于Button类的,只是风格有所不同,对所有Button类,都有一个统一的检测函数IsDlgButtonCh...原创 2019-05-23 14:35:22 · 1459 阅读 · 0 评论 -
win32 5.4 对话框 使用静态控件
静态控件初步介绍:静态控件是基于 Static 类,之所以叫 “静态”控件,是因为它们“安静”,不会因为你点击就向对话框发送“WM_COMMAND”消息,所以,一般静态控件的ID是没有什么用处的,定义时常常将它们定位-1,如果需要在程序中改变静态控件指定唯一的ID以便记性操作。资源脚本文件中可以使用缩写的基于Static类的有LTEXT、CTEXT、RTEXT(三类不同对齐方向的文本框)和...原创 2019-05-23 15:18:26 · 413 阅读 · 0 评论 -
win32 5.4 对话框 使用文本编辑控件
文本编辑控件介绍:文本编辑控件是基于 Edit 类的控件,可以使用 EDITTEXT定义,读者可以在文本编辑空间中输入并编辑文本。每当用户在文本编辑框中输入一个字符时,控件就会向对话框发送一个WM_COMMAND消息。文本编辑框的获取与设置:要获取文本框中的方法有多种,可以用 GetWindowText或者 WM_GETTEXT消息;要设置文本,可以使用 SetWindowTex...原创 2019-05-23 16:19:44 · 940 阅读 · 0 评论 -
win32 8.1 通用对话框简介
通用对话框函数由 Comdlg32.dll 提供, 在使用之前注意加上头文件:通用对话框列表:在这些对话框中,查找字符串和替换字符创的对话框是非模态的,方便用户在查找一个字符串以后,不必关闭对话框就可以继续查找另一个字符串,其他的对话框都是模态对话框。...原创 2019-06-02 08:02:26 · 417 阅读 · 0 评论 -
win32 7.5 区域和路径
前言:如果勇敢PhotoShop绘图软件,就一定记得它有“选择区域”,以及“路径”的概念,区域用来选定一个范围,以便对指定的范围进行某种操作;而路径相当于用虚拟的线条进行 “圈地运动”,虽然路径圈出来的看上去也是一个区域,但路径记录的是“圈地”用的线条而不是圈出来的地。使用区域:创建区域:GDI 中可以用下列区域建立函数来创建区域:CreateRectRgn 函数的参...原创 2019-06-01 23:19:48 · 303 阅读 · 0 评论 -
win32 7.4 块传送操作
块传送操作初步介绍:除了 7.2 节中的绘图函数,块传送函数也是重要的图形操作函数。块传送把源位置中的数据块按照指定的方式传送到目的位置中。把内存中的位图复制到窗口客户区,以及在不同的DC中复制图形数据都要用到块传送操作,块传送完成的工作就相当于图形之间的拷贝。块传送函数有 PatBlt,BitBlt,MaskBit,PlgBlt,TransparentBlt,StetchBlt。块传...原创 2019-06-01 19:35:24 · 375 阅读 · 0 评论 -
win32 7.2 绘制图形 画笔和画刷
“画笔和画刷”的介绍:GDI 中的绘画函数有 3 大类:画点、画线和画填充区域。对于photoshop之类的,一定知道,画线需要画笔,画填充区域需要画刷。GDI 同样也有画刷画笔等概念,画刷,画笔,以及其他一些GDI中要使用的东西,包括字体,区域,路径,图案和位图统称为GDI中的“对象”,通过SelectObject函数可以指定一个DC当前使用的对象对应哪一个对象句柄,称为“当前对象”。当...原创 2019-05-29 11:53:21 · 761 阅读 · 0 评论 -
win3.2 7.3 创建和使用位图-使用设备无关位图
介绍:设备无关位图简称 DIB,这在 5.3.1 节中已经有所介绍。DIB一般是存放在磁盘上的以 bmp 为拓展名的位图文件,使用 DIB 的关键是如何将 DIB 中的数据转换为一个内存中的位图并返回一个位图句柄。bmp 文件的结构定义:文件的开始是一个 BITMAPFILEHEADER 结构BITMAPFILEHEADER 结构肚饿后面要么是 BITMAPCOREHEADE...原创 2019-06-01 10:22:04 · 357 阅读 · 0 评论 -
win3.2 7.3 创建和使用位图 - 创建和使用位图
这个很好理解,前面,我们设备环境是屏幕,直接画在屏幕上;现在,我们的设备环境是位图,直接画在位图上,然后再显示在屏幕上,显示出来同样的效果。设备环境:所有绘画函数的操作对象都是“设备环境”,对位图操作也不例外。为了对位图使用GDI函数,需要使用 CreateCompatibleDC函数为位图建立一个DC,然后使用 SelectObject 函数将位图选入这个DC中,这样,所有对这个DC...原创 2019-06-01 09:15:04 · 383 阅读 · 0 评论 -
win32 7.1 色彩和坐标
Windows的色彩:一种颜色可以分成 红绿蓝 三原色,所以可以用红、绿、蓝3个分量的组合来表示颜色。索引色:当设备支持的颜色深度少于等于8位时,总体位数太少,不足以用来表达3个颜色分量,这时系统建立一个色彩表,像素数据用来做索引在颜色表中获取颜色值,所以低于8位的颜色成为索引色。win32中颜色的使用:在win32编程中,统一使用32位的整数来表示一个深度为24位的颜色,在这32位...原创 2019-05-29 08:48:00 · 631 阅读 · 0 评论 -
win32 7.1 设备环境
DOS和WINDOWS图形输出区别:DOS:在DOS系统中,如果在文本模式下显示信息,只需要把内容拷贝到 B8000h 处的内存中;显示图形信息,可以把图形拷贝到 A0000h 处的内存中。WHindows中,GDI接口把程序和硬件分割开来,在Win32编程中,再也不能通过直接向视频缓冲区拷贝数据的办法来显示信息了,那通过什么? 答案是通过“设备环境”来输出信息。“设备环境”介绍:...原创 2019-05-28 23:26:10 · 384 阅读 · 0 评论 -
win 7.2 绘制图形 - 代码解读
介绍:这个是解读那个 时钟代码 的,因为刚开始学习很多内容不聊了,代码篇幅比较长,同时还有很多数学计算在里面,虽然不复杂但全弄理解还是需要点时间的,所以,我们单独写一篇博客分析一下这个代码。代码解读:效果图:函数解读:自定义函数:我们按照 调用顺序依次往上讲解,当讲到最上面时,再讲程序原理,之后代码都很清楚了。1. _CalcClockParam proc : 获取 圆心坐标...原创 2019-05-31 13:39:53 · 280 阅读 · 0 评论 -
win32 5.4 对话框的资源定义
对话框的格式是:(其中 BEGIN END 用花括号 { } 来代替也行)其可选属性为(大体了解一下就好):代码解读:可以看出,其对话框中定义了四组控件,其分别是:图标、文本、按钮和一条横线。其中定义的 第三个是 控件的ID,我们在 对话框过程需要处理的:因为除了按钮,其余三个都是静态的,不会发送和接收消息,所以我们不需要控件ID,将其设置为 -1。但是按钮我们定义为 IDOK...原创 2019-05-21 19:19:45 · 469 阅读 · 0 评论 -
win32 6.2 windows 时间
“定时器”与“时钟”的联系:很多读者一开始看到“定时器”这个词,往往就联想到时钟,但是,经过我们前一章的探索,可以发现,“定时器”这种特征明显不能用来构造时钟,定时器用于时钟程序只能是用于定时器刷新屏幕这个功能上,要得到系统的时间还是要靠别的方法。Windows时间的获取和设置Windows获取系统时间的函数:它们之间区别:GetLocalTime 返回 当前时间。GetSy...原创 2019-05-25 10:41:36 · 414 阅读 · 0 评论 -
Windows 创建窗口(模块、模块句柄、实例、进程)
注册一个窗口代码:首先要获取该窗口的“上级”,即属于哪一个模块。1. 这里获取的是 模块句柄,也是实例,不是进程ID。窗口的上级并不是进程,而是模块。2. 一个进程由很多模块组成,比如执行文件 xx.exe模块,但光这一个模块不够,还需要 user32.dll模块等等,这些很多模块共同组成一个进程,而程序的主逻辑代码存储在 xx.exe模块中。3. 所以,我们获取的是这个 xx.exe句...原创 2019-05-14 21:58:24 · 656 阅读 · 0 评论 -
win32 5.1 菜单的修改、使用系统菜单、右键弹出菜单、菜单状态的检测和设置、其他菜单函数
菜单项的修改:在程序运行中可以动态修改菜单性,包括添加、删除和修改操作。使用几个API来进行操作,这个可以先进行略过,需要时阅读有关书籍即可。使用系统菜单:系统菜单的介绍:如下就是系统菜单。系统菜单的创建:WM_CREATE是窗口创建CreateWindow时,系统给消息处理程序发送的消息,每次窗口创建,有且只有1个WM_CREATE消息,所以只运行1次,可以在这里初始化滚...原创 2019-05-19 21:31:19 · 1049 阅读 · 0 评论 -
Windows 窗口程序的运行过程
如图所示:操作系统角度:Windows内核中维护了两个消息队列:系统消息队列 程序消息队列(采用虚拟内存,故对一个程序来说,只能看到自己的那份消息队列里的内容)用户的各种I/O操作,先被操作系统收录到 系统消息队列,然后再经过分配,分配到 相应的 程序消息队列中。(系统消息队列相当于快递的中转站,最终要从送到用户手上)此时,消息已经分配到消息队列中,但这是,并不意味着 在用户区的 程序...原创 2019-05-14 21:12:26 · 730 阅读 · 0 评论 -
关于 ESP EBP寄存器 在函数调用过程中对局部变量处理的理解
理解下图,你就能理解 局部变量 为什么不保存在数据段而保存在堆栈中,并且理解 EBP的含义。它并不是指向 真正的栈低。而是当前函数的栈的最低部。...原创 2019-05-14 18:32:18 · 348 阅读 · 0 评论 -
win32 5.1 菜单和加速键消息 的处理
用户调用菜单和加速键时,最终都会产生一个WM_COMMAND 或 WM_SYSCOMMAND (加速键要经过转换)所以,对于 窗口过程 来讲,其不会特殊区分用户调用的是菜单还是加速键,只需要处理 消息就好(通知码中会区分)。WM_COMMAND消息结构:wParam 的高位 = wNotifycode 通知码wParam 的地位 = wId 命令IDlParam = hwndCtl 发送...原创 2019-05-19 19:36:11 · 262 阅读 · 0 评论 -
win32 5.1 加速键和菜单的加载
菜单的加载:菜单加载有两种方法:注册窗口时使用默认菜单。创建窗口时在参数中指定菜单句柄。创建窗口时使用指定菜单句柄:获取菜单句柄在创建窗口时加载其窗口句柄如果在 .rc 文件中用 字符串 作为 菜单名,则需要使用字符串指针来处理现在 .asm 数据段中定义菜单名称字符串 szMenu “MainMenu”,0然后调用函数时采用 字符串指针作为参数 invoke...原创 2019-05-19 19:15:36 · 212 阅读 · 0 评论 -
Win32 5.1 菜单和加速键的定义
菜单的定义:介绍: 菜单基本所有软件都是必备的,下面介绍其如何定义的。定义策略:其保存在 xx.rc文件,在该文件开头需要把 resource.h 包含进来,里面包括windows预先设立的值,如 默认窗口属性。其用数字来定义,称为 资源的ID值,但并不是很直观,所以,在包含文件后,使用 #define 来将其定义成为 字符串形式。(注意:数值型ID总是限制在1~65535之间的原因...原创 2019-05-19 14:45:41 · 454 阅读 · 0 评论 -
Windows 窗口间的通信实验 - SendMessage 和 PostMessage 函数的区别
从逻辑上看:SendMessage函数相当于直接调用其他窗口的窗口过程来处理消息,并等待窗口过程的返回,在函数返回后,目标窗口过程必定处理了该消息。PostMessage函数则将消息放到目标窗口的消息队列中并直接返回,函数返回后,目标窗口过程还可能没有处理到该消息。对于普通消息来说,这两者速度差别之外其余差别不大。但是,PostMessage的参考文档明确说明,该函数不能用于任何参数...原创 2019-05-19 06:53:02 · 498 阅读 · 0 评论 -
Windows 窗口间的通信实验 -在窗口间传递数据 WM_COPYDATA
在 WM_SETTEXT 这些消息中,发送的只能是以 0 为结尾的字符串。szText db 'Text send to other windows',0为了支持在 窗口间 任意的消息拷贝,windows提供了 WM_COPYDATA 消息。WM_COPYDATA用一个 COPYDATASTRUCT 结构来描述要拷贝的数据的长度和位置:WM_COPYDATA消息:COPYDATAST...原创 2019-05-19 06:43:50 · 462 阅读 · 0 评论 -
win32 5.2 图标和光标
图标和光标都是图形资源,其在程序中显示分两步:首先先将找到该图片路径,并且加载到内存中,返回一个对应的资源句柄,表示其该资源在内存中的位置。然后在程序中使用该句柄,调用有关资源。注意:基本所有资源都要这两步,先加载到内存返回句柄,然后程序调用句柄来使用其资源,而不是程序直接从磁盘中读取显示文件,这个逻辑一定要理清。图标和光标的资源定义:图标ID ICON [DISCARD...原创 2019-05-20 13:09:19 · 413 阅读 · 0 评论 -
win32 5.4 对话框 使用滚动条
对话框种类分类:滚动条有水平和垂直两种,默认的 SCROLLBAR 定义的是 水平滚动条,它的默认风格是 SBS_HORZ 要定义垂直滚动条,后面则要加上 SBS_VERT 风格滚动条的消息发送:和其他子窗口控件发送 WM_COMMAND 消息不同,水平滚动条向对话框发送 WM_HSCROLL消息,而垂直滚动条则发送WM_VSCROLL消息,所以应该分别进行处理。消息格式:...原创 2019-05-24 12:35:08 · 500 阅读 · 0 评论 -
win32 5.4 使用 组合框
组合框 介绍:顾名思义,组合框是一个“组合”起来的东西,它由一个可供选择的列表,一个可供输入的 edit 类 组合而成的。组合框让用户既可以自己输入文本,也可以选择列表中的某一项当做输入。组合框的三种不同风格:CBS_SIMPLE 风格:它的上面是可以输入的文本,下面的列表可供选择预设本文。CBS_DROPDOWN风格:上面同样可以输入文本,但下面的列表时下拉式的,平常属于收起状态...原创 2019-05-24 13:26:53 · 493 阅读 · 0 评论 -
win32 6.1 定时器
DOS的定时功能介绍:在DOS操作系统中要用到定时功能的时候一般有两种方法,一种是用一个空循环来延时;二是截获时钟中断。计算机的硬件时钟会以每55ms一次的频率触发8号中断,而在默认的int 08 中断处理程序中有一句调用 int 1ch 的代码,所以截获 int 08h 或者 int 1ch 都可以达到定时的要求。第一种方法的定时效果随计算机主频的不同可能会大不相同,相比之下,第二种方...原创 2019-05-25 09:23:48 · 369 阅读 · 0 评论 -
win32 5.7 二进制资源和自定义资源
使用二进制资源初步介绍:在第二章中从提到 DOS 的 exe文件可以带一个覆盖部分,覆盖部分实际上就是在真正的可执行部分后面附加的数据,然后由程序在运行中打开自身文件并使用这些数据(我们调试器 od,加载的程序可以看做 二进制资源)。win32的可执行文件中除了上面介绍的这些标准类型的资源外,也可以在程序中附带其他的数据,当然方法完全不同 – win32资源中允许用户自己定义二进制的资源或...原创 2019-05-24 21:56:24 · 530 阅读 · 0 评论 -
win32 5.6 版本资源信息
版本资源信息介绍:有时应用程序要确保自己运行时使用某一版本的DLL,以便可以确保使用某些函数。检测版本就是通过API函数查询定义于资源中的版本信息来完成的,如果资源中没有定义版本信息,那么就无法知道一个函数的版本究竟是多少。版本信息号是以 VERSIONINFO 类型的的资源保存在应用程序中,里面可以定义的信息包括文件的版本号、创建单位和语种等。版本信息的定义是可选的,一个程序可以不定义版...原创 2019-05-24 21:15:36 · 291 阅读 · 0 评论 -
win32 5.5 字符串资源
在资源中定义字符串:程序中用到的字符串常常定义在 .const 段中,但Windows也提供了另外一种使用字符串常量的方法,那就是在资源中定义。虽然在资源中定义比较复杂一点,但它带来的好处是便于开发不同语言的版本,比如,要退出其他语种版本,只需要修改资源中的字符串表就可以了。即使语言转换的是由第三者通过修改可执行文件来做的(如编程爱好者常常做的汉化工作),修改资源也远比修改代码来得快捷和...原创 2019-05-24 20:09:11 · 430 阅读 · 0 评论