2011年12月9日

《windows核心编程系列》谈谈基址重定位和模块绑定

摘要: 每个DLL和可执行文件都有一个首选基地址。它表示该模块被映射到进程地址空间时最佳的内存地址。在构建可执行文件时,默认情况下链接器会将它的首选基地址设为0x400000。对于DLL来说,链接器会将它的首选基地址设为0x10000000,然后将该地址以及代码、数据的相关地址都写入它们的PE文件中。当它们被加载时,加载程序读取首选基地址的值,并试图把它们加载到相应位置。对于可执行文件和DLL中的代码,它们运行的时候所引用的的数据的地址,在链接的时候就已经确定。并且这些都是当exe文件或是DLL被加载到它们的首选基地址处时才是有效的。 对于汇编代码:MOV[0x00414540],5 它是将5赋值给0 阅读全文

posted @ 2011-12-09 22:52 ithzhang 阅读(278) 评论(0) 推荐(0)

2011年12月7日

《Windows核心编程系列》谈谈DLL高级技术

摘要: 本篇文章将介绍DLL显式链接的过程和模块基地址重定位及模块绑定的技术。 第一种将DLL映射到进程地址空间的方式是直接在源代码中引用DLL中所包含的函数或是变量,DLL在程序运行后由加载程序隐式的载入,此种方式被称为隐式链接。 第二种方式是在程序运行时,通过调用API显式的载入所需要的... 阅读全文

posted @ 2011-12-07 22:24 ithzhang 阅读(371) 评论(0) 推荐(0)

2011年12月5日

《windows核心编程系列》谈谈使用远程线程来注入DLL。

摘要: windows内的各个进程有各自的地址空间。它们相互独立互不干扰保证了系统的安全性。但是windows也为调试器或是其他工具设计了一些函数,这些函数可以让一个进程对另一个进程进行操作。虽然他们是为调试器设计的,但是任何应用程序都可以调用它们 。接下来我们来谈谈使用远程线程来注入DLL。 从根本上说,DLL注入就是将某一DLL注入到某一进程的地址空间。该进程中的一个线程调用LoadLibrary来载入想要注入的DLL。由于我们不能直接控制其他进程内的线程,因此我们必须在其他进程内创建一个我们自己的线程。我们可以对新创建的线程加以控制,让他调用LoadLibrary来载入DLL。windows提. 阅读全文

posted @ 2011-12-05 17:41 ithzhang 阅读(255) 评论(0) 推荐(0)

2011年12月1日

《windows核心编程系列》谈谈windows钩子

摘要: windows应用程序是基于消息驱动的。各种应用程序对各种消息作出响应从而实现各种功能。 windows钩子是windows消息处理机制的一个监视点,通过安装钩子可以达到监视指定窗口某种类型的消息的功能。所谓的指定窗口并不局限于当前进程的窗口,也可以是其他进程的窗口。当监视的某一消息到达指定的... 阅读全文

posted @ 2011-12-01 16:47 ithzhang 阅读(273) 评论(0) 推荐(0)

2011年11月28日

变长参数函数(转载)

摘要: 变长参数的函数即参数个数可变、参数类型不定的函数。设计一个参数个数可变、参数类型不定的函数是可能的,最常见的例子是printf函数、scanf函数和高级语言的Format函数。在C/C++中,为了通知编译器函数的参数个数和类型可变(即是不定的、未知的),就必须以三个点结束该函数的声明。view plaincopy to clipboardprint?//printf函数的声明 intprintf(constchar*_Format,...);//scanf函数声明 intscanf(constchar*_Format,...);//自定义变长参数函数func的声明 intfunc(inta,i 阅读全文

posted @ 2011-11-28 22:42 ithzhang 阅读(169) 评论(0) 推荐(0)

《windows核心编程系列》谈谈dll

摘要: DLL全称dynamic linking library.即动态链接库。广泛应用与windows及其他系统中。因此对dll的深刻了解,对计算机软件开发专业人员来说非常重要。windows中所有API都包含在DLL中。三个最重要的DLL是Kernel32.dll,User32.dll,GDI32.dll。使用dll的好处: 1:扩展了应用程序的特性。 2:简化了项目管理 可以让不同的开发团队管理不同的模块。 3:有助于节省内存。 一个dll可被多个程序共享。多个程序调用同一个dll内的同一个函数时,系统却只需将该dll加载一次。 4:促进资源共享。 5:促进了本地化 可以使应用程序只包含代码但不 阅读全文

posted @ 2011-11-28 22:24 ithzhang 阅读(229) 评论(0) 推荐(0)

2011年11月26日

QQ盗号核心编程 (转)

摘要: [转载] QQ盗号核心编程 经常有听到有朋友QQ被盗的消息,总感觉做出这种行为的人是可鄙的,不就是对QQ窗口进行监视,然后再是记录用户输入的号码和密码,认为没什么了不起。 对于Windows核心编程,本人还是一只菜鸟,前一段时间把《Windows系统编程》粗略的看一边(当然重点地方仔细的看),由... 阅读全文

posted @ 2011-11-26 12:18 ithzhang 阅读(299) 评论(0) 推荐(0)

2011年11月22日

《windows核心编程系列》谈谈内存映射文件

摘要: 内存映射文件允许开发人员预订一块地址空间并为该区域调拨物理存储器,与虚拟内存不同的是,内存映射文件的物理存储器来自磁盘中的文件,而非系统的页交换文件。将文件映射到内存中后,我们就可以在内存中操作他们了,就像他们被载入内存中一样。内存映射文件主要有三方面的用途:1:系统使用内存映射文件来将exe或是dll文件本身作为后备存储器,而非系统页交换文件,这大大节省了系统页交换空间,由于不需要将exe或是dll文件加载到页系统交换文件,也提高了启动速度。2:使用内存映射文件来将磁盘上的文件映射到进程的空间区域,使得开发人员操作文件就像操作内存数据一样,将对文件的操作交由操作系统来管理,简化了开发人员的. 阅读全文

posted @ 2011-11-22 21:30 ithzhang 阅读(205) 评论(0) 推荐(0)

2011年11月21日

《windows核心编程系列》谈谈windows线程栈

摘要: 谈谈windows线程栈。 当系统创建线程时会为线程预订一块地址空间区域,注意仅仅是预订。默认情况下预定的这块区域的大小是1MB,虽然预订这么多,但是系统并不会给全部区域调拨物理存储器。默认情况下,仅仅为两个页面挑拨。x86系统下每个页面是4KB.其他页面会在访问的时候由系统调拨。这仅仅是在创建线程时,程序员指定CreateThread的第二个参数StackSize为0时才会发挥作用。如果程序员传入的是非零值,那么调拨的物理存储器的数量就是这个非零值。 这两个默认的页面是从哪里来的呢?原来是在链接的时候,系统会将当前编译器中指定的大小写入PE文件中。(PE文件即为exe可执行文件),如果Sta 阅读全文

posted @ 2011-11-21 22:51 ithzhang 阅读(240) 评论(0) 推荐(0)

2011年11月17日

这几天在忙着做课程设计

摘要: 最近在研究windows socket编程。之所以研究它是因为今年的课程设计老师让做一个基于windows的程序。刚开始准备写局域网管理软件,里边就有局域网聊天的功能。写着写着觉得聊天挺有意思的,何不写一个仿照qq的聊天程序。前前后后写了3个,先是基于TCP转发的,再是试验下udp,最后才是现在的样子:服务器跟客户端之间是用TCP,而客户端之间是基于UDP的。写到一半才知道qq的好像都是基于udp的。没办法,都写到一半的也没法改了。到今天为止,基本的聊天功能跟界面都已成型,还差一个文件传输和连接数据库。期间遇到了很多拦路虎,毕竟这学期才开了网络课,都是一些原理的东西,没有涉及到实际使用。走了. 阅读全文

posted @ 2011-11-17 20:55 ithzhang 阅读(214) 评论(0) 推荐(0)

导航