自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 汇编中的GDI

以前一直用GDI来做图,但GDI是为了屏蔽在不同设备上面显示差异而产生的东西,    当屏幕上面出现了窗口最小化或是遮挡的时候,窗口的一部分就会被覆盖,这时候windows就会将这个窗口的这个部分标记为无效区域,但windows发现这个窗口的程序的消息队列中空闲了,它就会把一个WM_PAINT消息放进去    在相应WM_PAINT消息来刷新窗口的时候,常常会用到一个叫做设备上下文的东西,这个东西

2010-04-15 11:57:00 791

原创 神奇的汇编(九)

版本信息是通过rc.exe编译器编译在资源里面的,它的格式大概是这样VS_VERSION_INFO VERSIONINFO FILEVERSION 1,0,0,1 PRODUCTVERSION 1,0,0,1 FILEFLAGSMASK 0x3fL#ifdef _DEBUG FILEFLAGS 0x1L#else FILEFLAGS 0x0L#endif FILEOS 0x4L FILETYPE

2010-04-13 14:44:00 817

原创 神奇的汇编(八)

位图是win32程序中最常使用的资源。位图的优点就是它的绘制速度很快,基本只是一个内存拷贝的时间。位图是Windows支持存储图像的方式。图像中的每个像素对应存储器中的一位或是多位。每个像素对应的位数叫做颜色的深度但存储在文件中的位图的颜色深度常会和屏幕等设备的颜色深度不同,因而常常需要转换。为了准确的描述位图的颜色信息,必须有像素数据的属性说明,以及色彩表,在需要转换的时候可

2010-04-11 19:03:00 463

原创 神奇的汇编(七)

win32 的文件中的资源是编译在文件中的图标和光标在定义的时候不是直接写在脚本中的,也没法写在脚本中,它们的样式(图片)定义在其他文件,而仅仅只是在脚本中定义这些文件的位置以及对应的标识。 如:MyIcon  icon “1.ico”      MyCursor  cursor  “big arrow.ani” 使用它们依然是使用loadicon或是loadcursor,

2010-04-11 18:53:00 410

原创 神奇的汇编(六)

菜单和加速键是我一直都没有怎么用的东西,也没有仔细的去研究它,其实它是用一个脚本文件(.rc)来编写,同时也是用专门的编译器(同样叫rc.exe,vs自带的)来编译的。菜单的定义和加速键的定义一般都有自己的格式,这里不重复了,但是要提一点的是,每个资源都要有一个资源号,通常是个16位的整数每种资源这个号必须唯一一般在程序中需要通过 loadmenu loadaccelerator 来读取这

2010-04-09 17:28:00 408

原创 神奇的汇编(五)

现在有许多的东西似乎是和汇编没有太大的关系,但是许多东西是通过观察汇编编写win32程序发现的1.关于消息循环的GETMESSAGE其实并不能获取到窗口获得的所有消息,有许多消息是windows自己直接调用窗口过程的2.关于SendMessage这个函数是直接调用窗口过程的,而不会将消息发送到消息队列中。当这个函数跨进程使用的时候,如果参数使用的  是指针,对于系统定义的消息是可以使用,但这个

2010-04-09 14:35:00 380

原创 神奇的汇编(四)

这个应该不是汇编的问题,但这个不得不提一下,因为在编程的过程中经常碰见销毁窗口的时候需要退出程序时,程序随机的crash,这种问题很郁闷原因很复杂,但在汇编中看本质是比较靠谱的这个问题最主要的原因很可能是消息循环和窗口函数的问题下面理一理一个窗口点退出,可能是发送给消息队列wm_close消息,这个消息只是告诉消息循环用户要关闭窗口但如果调用DestroyWindow,这个时候会给循环

2010-04-09 11:08:00 452

原创 调试程序光靠工具是不行的!

今天遇到一个程序退出的问题,没次都crash,但是就是没有crash log没办法上ollydebug 简单的看了下问题,堆栈都被毁了,出错的位置在一个不知道是什么的模块中最后没有办法,上了windbg,用windbg启动程序,先g,让程序运行起来,通常调试器是会在程序的入口点断一下函数的接着,我就退出了函数,当然的,程序crash了,检查了下堆栈,什么也没有,就一个threads

2010-04-08 23:15:00 460

原创 神奇的汇编(三)

这一节说的主要是函数在汇编中一定也有函数它叫子程序它用       子程序名 proc 语言类型 可视区域 参数 类型        。。。  。。。      子程序名 endp 来定义的调用它也很简单 直接invoke就可以了 但是想c中一样 要调用它一定少不了声明 不声明就调用一定会出错 声明它的方法也蛮简单     函数名 proto

2010-04-08 01:07:00 552

原创 神奇的汇编(二)

汇编中有不少是取地址的操作,同时根据数据的不同这个操作的伪指令也不相同 其中 offset 只能用于全局变量,它取地址仅仅是把指令和地址做了替换,它是在编译期完成的 为了取到局部变量的地址,我们可以使用ebp结合伪指令lea来完成 lea eax,[ebp-8] 就可以,很简单和方便 为了在invoke中使用地址值,通常是使用addr invoke 函数

2010-04-07 23:37:00 458

原创 神奇的汇编(一)

汇编中也有强制转换的命令 使用  类型    ptr  变量名 可以把这个变量强制转化为指定的类型,类型可以为byte,word,dword,fword,qword,real8和real10 看看下面这段   .databTest1        db            12hwTest2       dw            1234hdwTest3

2010-04-07 23:05:00 1360

原创 db dw 必须知道的汇编伪指令

http://mcit.xjtu.edu.cn/reference/CAI/3/node3_2.htm上面这个地址有详细的介绍  它们都是开辟一个内存区域,把后面的参数内容放入

2010-04-05 12:09:00 16320

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除