
Windows
文章平均质量分 80
benny5609
普通得不能再普通的80年代后
展开
-
PE文件格式
第一节 PE文件格式 PE教程1: PE文件格式一览考虑到早期写的PE教程1是自己所有教程中最糟糕的一篇,此番决心彻底重写一篇以飨读者。 PE 的意思就是 Portable Executable(可移植的执行体)。它是 Win32环境自身所带的执行体文件格式。它的一些特性继承自 Unix的 Coff (common object file format)文件格式。"portable原创 2007-09-17 13:20:00 · 1800 阅读 · 2 评论 -
JIURL玩玩Win2k内存篇 分页机制 (二)
进程的页目录和页表在虚拟地址空间中的位置当执行一条访问内存的指令时,如果寄存器中的分页标志位已经被设置,CPU就自动完成虚拟地址到物理地址的转换,来完成该指令。CPU在转换地址过程中,并不需要页目录和页表的虚拟地址。但是分页标志位被设置之后,CPU会把所有指令中的地址当做虚拟地址转换成物理地址。所以程序中使用的都是虚拟地址。一个进程的页表和页目录是由系统维护的,比如一个进程申请或者释放内存,系原创 2007-09-17 14:13:00 · 1078 阅读 · 0 评论 -
JIURL玩玩Win2k内存篇 Page Frame Number Database
引子 当系统需要提供一个物理页给应用程序,来满足应用程序要求的时候,将遇到一个问题,系统如何知道哪些物理页已经被使用,哪些物理页没有被使用。Page Frame Number (PFN) DataBase (页帧号数据库)和它的相关结构用来解决这个问题。Working Set 简介一个进程的 Working Set 是进程当前所使用在物理内存中的页的集合。程序使用这些页不会引发原创 2007-09-17 14:20:00 · 834 阅读 · 0 评论 -
《windows核心编程》学习笔记 内核对象
1.内核对象: 1).符号对象 2).事件对象 3).文件对象 4).文件影象对象 5).I/O完成对象 6).作业对象 7).信箱对象 8).互斥对象 9).管道对象 10).进程对象 11).信标对象 12).线程对象 13).等待计时器对象2.内核对象只能由内核所拥有,而不是由进程拥有.3.内核对象的数据结构有原创 2007-09-16 10:19:00 · 662 阅读 · 0 评论 -
COFF格式
COFF – 通用对象文件格式(Common Object File Format),是一种很流行的对象文件格式(注意:这里不说它是“目标”文件,是为了和编译器产生的目标文件(*.o/*.obj)相区别,因为这种格式不只用于目标文件,库文件、可执行文件也经常是这种格式)。大家可能会经常使用VC吧?它所产生的目标文件(*.obj)就是这种格式。其它的编译器,如GCC(GNU Compiler Col原创 2007-09-17 12:00:00 · 1357 阅读 · 0 评论 -
PE学习笔记(一)
PE学习笔记 PE 的意思就是 Portable Executable(可移植的执行体)。PE文件结构的总体层次分布图: --------------|DOS MZ Header ||--------------||DOS Stub ||--------------||PE Header ||--------------||Section Table ||---------原创 2007-09-17 12:18:00 · 770 阅读 · 0 评论 -
PE学习笔记(二)
五、Section Table(节表) 节表是紧挨着 PE Header 的一结构数组。该数组成员的数目由 File Header (IMAGE_FILE_HEADER) 结构中 NumberOfSections 域的域值来决定。节表成员结构又命名为 IMAGE_SECTION_HEADER(四十字节)。其结构定义:typedef struct _IMAGE_SECTION_HEADER原创 2007-09-17 12:33:00 · 737 阅读 · 0 评论 -
JIURL玩玩Win2k内存篇 分页机制 (一)
基本概念 Windows 2000 使用基于分页机制的虚拟内存。每个进程有4GB的虚拟地址空间。基于分页机制,这4GB地址空间的一些部分被映射了物理内存,一些部分映射硬盘上的交换文件,一些部分什么也没有映射。程序中使用的都是4GB地址空间中的虚拟地址。而访问物理内存,需要使用物理地址。下面我们看看什么是物理地址,什么是虚拟地址。物理地址 (physical address): 放在寻原创 2007-09-17 13:34:00 · 738 阅读 · 0 评论 -
JIURL玩玩Win2k内存篇 分页机制 (三)
8种转换由于页表被映射到了0xc0000000 开始的4MB地址空间。所以我们也可以象CPU那样完成虚拟地址到物理地址的转换。系统按照对应虚拟空间的先后顺序,把一个进程的页表映射在0xc0000000 开始的4MB地址空间中,把页目录映射在0xc0300000 开始的4KB地址空间中。于是我们可以做如下几种地址的相互转换。1 虚拟地址->虚拟地址对应的PDE地址PDE_Address=(Virtu原创 2007-09-17 14:15:00 · 776 阅读 · 0 评论 -
JIURL玩玩Win2k内存篇 分页机制 (四)
为什么地址空间的大小是4G 使用32bit的cpu话,处理32bit的数据比较好。这就决定了在代码中将被非常频繁使用的地址是32bit的。而32bit的地址可以寻址的范围是从0x00000000 到 0xFFFFFFFF ,也就是4GB(对于以字节为单位的编址)大小的范围。也就决定了地址空间的大小是 4G。为什么一页的大小是4K(只是我个人的看法) 确定了虚拟地址空间的大原创 2007-09-17 14:17:00 · 1150 阅读 · 0 评论 -
WINDOWS核心编程之什么是内核对象(一)
近来看了WINDOWS核心编程一书,看的挺过瘾(当然不会就去撞墙,回来再看,呵呵). 为了大家能更快的去了解其中的内容,特写此学习笔记供大家参考。注:本文章可以转载, 标明出处就可以啦在学习c++的时候,老师就讲类啊,对象,三大特性什么的,搞的我的头都大了,但你回想起来,也就那么回事,一捅就破的问题。这不又出了个内核对象,你说烦不烦人,呵呵,慢慢来你就会明白的。1.什么是内核对象我们在原创 2007-09-16 10:11:00 · 880 阅读 · 0 评论 -
WINDOWS核心编程之什么是内核对象(二)
1.进程的内核对象句柄表当一个进程被初始化时,系统要为它分配一个句柄表.该句柄表只用于内核对象不用于用户对象或GDI对象.句柄表它只是个数据结构的数组,每个结构都包含一个指向内核对象的指针,一个访问屏蔽和一些标志. 句柄表如图如示 索引原创 2007-09-16 10:14:00 · 773 阅读 · 0 评论 -
WINDOWS核心编程之什么是内核对象(三)
1.内核对象句柄的继承性当父进程创建内核对象时,必须向系统指明,它希望对象的句柄是个可继承的句柄。父进程可以使用一个或多个内核对象句柄,并且该父进程可以决定生成一个子进程,为子进程赋予对父进程的内核对象的访问权。 注意啦:虽然内枋对象句柄具有继承性,但是内核对象本身不具有继承性. 2.创建能继承的句柄父进程只要指定SECURITY_ATTRIBUTES 结构中的bInher原创 2007-09-16 10:15:00 · 809 阅读 · 0 评论 -
api操作串口
1. 用途:打开串口 原型:HANDLE CreateFile(LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes DWORD dwCreationDistribution, DWOR原创 2007-09-16 21:11:00 · 933 阅读 · 0 评论 -
PE文件格式
PE文件格式(翻译:QduWg,原作LUEVELSMEYER)说明:希望本文能够对初级入门CRACKER有一定帮助,翻译存在疏漏或者不准确,希望来信指出。感谢您的指导!感谢看雪为我们提供这个交流平台,让我们技术与时俱进!!前言:PE("portable executable")文件格式是针对MS windows NT, windows 95 andwin32s的可执行二进制代码原创 2007-09-17 10:40:00 · 1035 阅读 · 1 评论 -
JIURL玩玩Win2k内存篇 VAD
在程序中我们可以使用 VirtualAlloc 在用户地址空间(4G地址空间中的低2G)中申请(保留或者提交)指定地址和大小的一段地址空间。那么系统如何知道指定的这段地址空间是不是已经被分配(保留或者提交)。对于指定地址空间是否已经被提交了物理内存,可以通过页目录和页表来判断,不过这样做很麻烦。而对于指定地址空间是否已经被保留,通过页目录和页表没有办法判断。Win2k 中使用 VAD 来解决这个问原创 2007-09-17 14:19:00 · 1344 阅读 · 0 评论 -
JIURL玩玩Win2k内存篇 LookasideList
系统的堆的简介 系统的堆是系统的数据动态申请和释放的地方。Win2k 把系统堆叫做 pool。根据是否可以被换出物理内存,分为 PagedPool 和 NonPagedPool。LookasideList Windows 2000 中有很多种结构,这些结构需要动态申请。也就是在系统的 pool 中申请。在 pool 中申请和释放内存都是比较慢的,因为申请的时候需要在 p原创 2007-09-17 14:22:00 · 1008 阅读 · 0 评论 -
JIURL玩玩Win2k进程线程篇 HANDLE_TABLE
Win2k Build 2195 中 EPROCESS 偏移+128 处的 struct HANDLE_TABLE *ObjectTable ,就是指向该进程 HANDLE_TABLE 结构的指针。通过一个进程的 HANDLE_TABLE 结构,我们可以找到这个进程打开的所有对象。我们在程序中获得的各种句柄,就是对象在句柄表中的索引。例如,在程序中打开文件,获得的是一个句柄(HANDLE)。接下来原创 2007-09-17 16:01:00 · 1662 阅读 · 1 评论 -
深度解析VC中的消息传递机制(下)
消息的接收 消息的接收主要有3个函数:GetMessage、PeekMessage、WaitMessage。 GetMessage原型如下:BOOL GetMessage(LPMSG lpMsg,HWND hWnd,UINT wMsgFilterMin,UINT wMsgFilterMax); 该函数用来获取与hWnd参数所指定的窗口相关的且wMsgFilterMin和wMsg原创 2007-09-17 21:20:00 · 870 阅读 · 0 评论 -
Windows可执行文件简述(一)
Windows可执行文件简述(一) 操作系统中的文件是一种抽象的机制,提供了一种在磁盘上保存信息而且方便以后读取的方法。在Windows操作系统中,一个用户可以最直接体会到的文件的形式就是以.exe、.dll等为扩展名的可执行文件。伴随着Windows操作系统的不断进步,其可执行文件的格式也发生了巨大变化。这期间主要有4个过程:DOS中出现的最简单的以.com为扩展名的可执行文件和以.ex原创 2007-09-17 12:36:00 · 1026 阅读 · 0 评论 -
Windows可执行文件简述(二)
如果PSP中的第一个FCB含有一个有效驱动器标识符,则置AL为00h,否则为0FFh。MS-DOS还置AH为00h或0FFh,这依赖于第二个FCB是否含有一个有效驱动器标识符。 建造PSP后,MS-DOS在PSP后立即开始(偏移100h)加载com文件,它置SS、DS和ES为PSP的段地址,接着创建一个堆栈。为了创建这个堆栈,MS-DOS置SP为0000h。如果没有分配64K内存,则要置寄原创 2007-09-17 12:38:00 · 856 阅读 · 0 评论 -
Windows可执行文件简述(三)
4.LE格式在Windows3.x的时代,从DOS启动Windows,Windows在把机器转到保护模式之前需要在实模式下做一些初始化。实模式的16位代码必须和32位代码一起放在可执行文件中。旧的DOS下的可执行文件和NE格式的可执行文件无法满足这个要求,于是从Win 3.x起到Win 9x,产生了一种新型的可执行文件格式LE,它只适用于工作于系统底层的、同时包含16位代码和32位代码的VxD原创 2007-09-17 12:43:00 · 918 阅读 · 0 评论 -
消息函数列表
Appendix A Message Map Functions in the Microsoft Foundation Class Library HANDLERS FOR WM_COMMAND MESSAGES Map Entry Function Prototype ON_COMM原创 2007-09-19 10:46:00 · 1439 阅读 · 0 评论 -
程序员最基本的技能----------调试
调试是一个程序员最基本的技能,其重要性甚至超过学习一门语言。不会调试的程序员就意味着他即使会一门语言,却不能编制出任何好的软件。这里我简要的根据自己的经验列出调试中比较常用的技巧,希望对大家有用。本文约定,在选择菜单时,通过/表示分级菜单,例如File/Open表示顶级菜单File的子菜单Open。设置为了调试一个程序,首先必须使程序中包含调试信息。一般情况下,一个从AppWizard创建原创 2007-10-19 21:05:00 · 1182 阅读 · 0 评论 -
vc查看宏展开之后的结果的查看方式
查看展开后的宏:vc: project menu->settings project settings dialog C/C++ tab category : preprocessor Project options: 最后加上 /P rebuild all,会产生于.cpp同名的.i文件。在这里宏被展开了原创 2007-09-27 18:40:00 · 988 阅读 · 0 评论 -
Windows下Subversion的安装和使用
Subversion是新一代的开源的版本控制工具,目前有望替代CVS,成为版本控制的首选系统。subversion在Windows下的安装和使用也很方便。 1、下载subversion:http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91最新版本:svn-1.4.4-setup.exe 2、下原创 2007-09-28 07:55:00 · 4841 阅读 · 4 评论 -
使用画line的方法介绍HDC CDC CClientDC CWindowDC用法
建立项目,采用单文档结构HDC:首先在CYourClassView类中add windows message handler, 一个是LButtonDown, 另一个是LButtonUp. 添加成员变量:m_ptOrigin用来记录初始点位置。在view结构体中初始化m_ptOrigin变量:CYourClassView:: CYourClassView (){原创 2007-09-30 10:30:00 · 1618 阅读 · 0 评论 -
VCKBase_50_篇2:Unicode
读了韩耀旭的VC++的Unicode编程,试了下在VC2005中设置非Unicode环境编译程序,这里简单记录一下。 在VC6下面,默认的编译环境是Ansi,不是Unicode。VC6下面也支持Unicode编程,毕竟系统API函数都是以T类型作为参数和返回值的。具体的VC6下面如何使用Unicode编程,按照原作者方式试试。 在这里,我要说的是在原创 2007-09-30 11:04:00 · 720 阅读 · 0 评论 -
HDC vs CDC
HDC是一个句柄,CDC是一个MFC定义的类,CDC *是定义一个CDC类的指针,CDC的类成员中应该有一个成员变量m_hDC就是对应的HDC 假设已经有一个CDC CDC *pdc=GetDc(); HDC hdc=pdc.GetSafeHdc(); HDC是CDC实例的句柄 如果已经知道一个句柄,可以得到这个CDC对象 CDC *pdc=FromHandle( hdc ); 有原创 2007-09-30 10:18:00 · 1801 阅读 · 0 评论 -
Visual C++开发工具与调试技巧整理
自己总是用VC平台来开发东西,但是有时候总是出这样那样的问题,呵呵,总是需要上网查资料来解决,在这里把自己用到上网查的一些技巧摘录如下,希望对大家有用,省去大家再去搜索的烦恼。1.如何在Release状态下进行调试Project->Setting=>ProjectSetting对话框,选择Release状态。C/C++标签中的Category选General,Optimizations选D原创 2007-09-26 17:43:00 · 556 阅读 · 0 评论 -
vc开发工作小结
一隐藏任务条上的图标第一、创建对话框时必须将它作为某个不可见框架窗口的子窗口;第二、这个不可见框架窗口的扩展式样必须设置 WS_EX_TOOLWINDOW;第三、保证对话框的扩展式样没有设置 WS_EX_APPWINDOW; 先在CWinApp继承类中建立一个不显示的顶级窗口. CFrameWnd *pFrame=new CFrameWnd();pFrame->Create(0,0,WS_OV原创 2007-10-05 18:49:00 · 6186 阅读 · 0 评论 -
Windows API函数大全
1. API之网络函数WNetAddConnection 创建同一个网络资源的永久性连接 WNetAddConnection2 创建同一个网络资源的连接 WNetAddConnection3 创建同一个网络资源的连接 WNetCancelConnection 结束一个网络连接 WNetCancelConnection2 结束一个网络连接 WNetCloseEnum 结束一次原创 2007-10-03 02:15:00 · 1188 阅读 · 0 评论 -
常用数据类型使用转换详解
CString ,BSTR ,LPCTSTR之间关系和区别CString是一个动态TCHAR数组,BSTR是一种专有格式的字符串(需要用系统提供的函数来操纵,LPCTSTR只是一个常量的TCHAR指针。CString 是一个完全独立的类,动态的TCHAR数组,封装了 + 等操作符和字符串操作方法。typedef OLECHAR FAR* BSTR;typedef const char * LPCT原创 2007-10-05 19:04:00 · 731 阅读 · 0 评论 -
VC技术内幕笔记1-3
第三章:从“Hello,world!”着手学习AppWizard1,视图:从用户角度看,视图是一个普通的窗口;从程序员角度看,试图是一个从MFC库中CView类所派生的类的对象。视图对象的行为完全由类的成员函数和数据成员决定,其中包括派生类的特定成员和基类的继承而来的成员。2,CEx03aView类最重要的基类是CWnd和CView。CWnd提供CEx03aView的窗口属性,而CView原创 2007-10-02 22:28:00 · 1260 阅读 · 0 评论 -
右键菜单的实现(类)
HTREEITEM m_hItem; CXMLView* m_hWnd; void DisplayMenu(); private: CBitmap m_AddMap; CBitmap m_DelMap; void CRightClick::DisplayMenu() { m_hWnd = (CXMLView*)(((CMainFrame*)AfxGetMainWnd())->GetAct原创 2007-10-05 18:59:00 · 878 阅读 · 0 评论 -
浅谈内存的泄漏
浅谈内存的泄漏(一)对于一个c/c++程序员来说,内存泄漏是一个常见的也是令人头疼的问题。已经有许多技术被研究出来以应对这个问题,比如Smart Pointer,Garbage Collection等。Smart Pointer技术比较成熟,STL中已经包含支持Smart Pointer的class,但是它的使用似乎并不广泛,而且它也不能解决所有的问题;Garbage Collection技原创 2007-10-08 09:34:00 · 773 阅读 · 0 评论 -
MFC中CList类使用注意
初学mfc者,往往对CList等mfc的Collect类的使用感到迷惑,在使用中经常会遇到许多问题,导致对vc中的Collect类的使用产生了惧怕。以下,就个人经历而言,告诉大家如何使用CList。CList是一个双向链表类。1、头文件名不可少Clist类定义在Afxtempl.h 头文件中,因此在使用该类时,需要加这个头文件名。2、理解CList的声明和构造方法CList原创 2007-10-10 18:41:00 · 15697 阅读 · 0 评论 -
如何使用SetTimer MFC
Timer事件,即定时器事件,是在游戏编程中,经常使用的一个事件。借助它可以产生定时执行动作的效果。这篇文章,就和大家一起探讨一下如何使用SetTimer()函数。 1、SetTimer定义在那里? SetTimer表示的是定义个定时器。根据定义指定的窗口,在指定的窗口(CWnd)中实现OnTimer事件,这样,就可以相应事件了。SetTime原创 2007-10-10 18:45:00 · 2157 阅读 · 0 评论 -
CArray深入体验
在编写一个涉及到矢量图形操作系统和空间数据拓扑关系的系统的时候,我利用了CArray来存储空间数据。 在编程过程中,我发现了由于过分信任CArray的功能而引起的一个很不容易察觉的内存泄漏。让我们首先来看看下面的一个类定义:Class CBreakPoint{public: …… double *xy; //the coor原创 2007-10-10 18:56:00 · 903 阅读 · 0 评论 -
亲密接触VC6.0编译器
大家可能一直在用VC开发软件,但是对于这个编译器却未必很了解。原因是多方面的。大多数情况下,我们只停留在“使用”它,而不会想去“了解”它。因为它只是一个工具,我们宁可把更多的精力放在C++语言和软件设计上。原创 2007-10-11 11:42:00 · 812 阅读 · 0 评论