上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 13 下一页
摘要: 国庆这两天在家里看了>,加上之前看过>和>这两本书,总觉得原来高端的东西似乎也没那么神秘,里面的模式自己在工作中也都用到过,并没有怎么特意地去学习,都是自己写代码总结出来的,看了三本设计模式的书,最终记住的模式也没几个,或者说,最终自己也没学到什么东西谈设计模式一定要谈到面向对象,面向对象的本质是多态,封装和继承,设计模式则能使不稳定依赖于相对稳定、具体依赖于相对抽象,避免会引起麻烦的紧耦合,以增强软件设计面对并适应变化的能力更多的来看,设计模式更像是对于面向对象编程的一种补充,是为了代码的重用性、灵活性和扩展性。但是,不管是重用,灵活,扩展,最起码的基本要求是代码的可读性为 阅读全文
posted @ 2013-10-03 22:48 linyilong 阅读(868) 评论(1) 推荐(0)
摘要: int main(void){ HANDLE hFile = CreateFile("D:\\Shipyard.exe", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, ... 阅读全文
posted @ 2013-07-24 09:48 linyilong 阅读(902) 评论(0) 推荐(0)
摘要: 在前面的注入代码的章节中,我们利用了VirtualAllocEx来在对方的进程开辟了一块内存,并且将代码复制进对方进程的内存里面,从而执行那段内存的代码,但是这里有一个问题,就是代码不是执行在我们进程内的,所以我们无法像在本进程编程那样直接利用返回值或者传入指针来获取计算结果,这个时候我们可能需要到很多通讯手段,但是这样将会让我们的注入代码变得非常复杂,所以我自己想了一个方法,就是利用VirtualAllocEx开辟的内存区域来进行通讯整体的步骤是这样的:1.在对方的内存开始一块内存,2.复制代码进去3.根据代码计算出我们的结果应该放在哪里,比如我们申请了100字节的内存,其中50字节是代码, 阅读全文
posted @ 2013-06-23 14:04 linyilong 阅读(1192) 评论(0) 推荐(0)
摘要: 从WINDOWS VISITA开始以后,windows已经开始支持随机基址的关系,也就是说以前我们的进程基址都是从0x40000开始的,如果一个变量在我们第一次运行的时候地址为0x50000,那么以后也都会在这个位置而VS2008后开始提供随机基址的功能,在WINDOWS VISITA后的版本也都支持这个功能,这样进程的基址将不会再固定从一个地方开始,变量的地址也会随着基址的不同而不同,加大了我们对一个进程修改的难度,我们每次修改一个变量不能再将变量写死,而是要根据基址+数据偏移量来算出数据的地址,那么,我们怎么去获得一个进程的基址呢??在我们程序运行的时候,我们进程自己的HINSTANCE或 阅读全文
posted @ 2013-06-20 22:35 linyilong 阅读(6573) 评论(3) 推荐(1)
摘要: 有使用过外挂的朋友应该知道,我们在玩游戏的时候,有很多辅助功能给你使用,比如吃药,使用物品等功能,这个时候我们就是使用注入代码的技术,简单的来将就是我们让另外一个进程去执行我们想让它执行的代码,这中间的关键函数是CreateRemoteThreadHANDLE WINAPI CreateRemoteThread( _In_ HANDLE hProcess, _In_ LPSECURITY_ATTRIBUTES lpThreadAttributes, _In_ SIZE_T dwStackSize, _In_ LPTHREAD_START_ROUTINE lpStartA... 阅读全文
posted @ 2013-06-17 22:39 linyilong 阅读(19334) 评论(16) 推荐(10)
摘要: 在windows下,不管是进程还是句柄或者文件,他们都可以抽象为一个HANDLE,如果有接触过linux编程的都知道,linux下一切皆文件,对进程,文件,socket的操作都是通过int来标识的,windows下的HANDLE概念也跟linux下的int概念差不多,都可以归结为类似与ID的数据类型,只是表示形式不一样,我们对于所有对象的操作都需要通过这个标识来传递当然在WINDOWS下还包括HICON,HWND等,大部分都是UI相关的,我们值需要知道HWND是操作窗口的标识符,HICON是图标的标识符,我们后面将会讲到如何通过窗口来操作其他进程如果我们要操作其他的进程,首先需要的肯定是要能够 阅读全文
posted @ 2013-06-12 16:46 linyilong 阅读(6470) 评论(0) 推荐(1)
摘要: 1.需要用到的函数学过Windows编程的应该都知道,Windows的核心机制是消息机制,消息是操作系统告诉应用程序发生了什么事情,比如当用户移动了鼠标或者按键后,操作系统会通知应用程序实际上在Windows下,我们可以监控操作系统发送给另外一个进程的消息,然后决定对这个消息怎么处理,比如继续发送,或者改变消息,或者不让这个消息发给应用程序,也可以让应用程序处理完消息后通知监控的进程 这些都依赖一个API,SetWindowsHookExHHOOK WINAPI SetWindowsHookEx( _In_int idHook, _In_HOOKPROC lpfn, _In_HINSTA... 阅读全文
posted @ 2013-06-09 16:40 linyilong 阅读(4115) 评论(1) 推荐(1)
摘要: 1.多值返回在C/C++里面如果需要返回多值,一般是在函数传入指针或者引用,比如fun(int *a,int *b,int *c),但在go里面,如果需要返回多值,只需要把函数写成这样1 func test_func()(int,int,int){2 a := 1;3 b := 2;4 c := 3;5 6 return a,b,c;7 }最后函数会依次返回a,b,c这个其实在lua中早就有了,所以实际上在go里面也算不上什么新的东西,go里面还有一个返回值命名的特性 func read_file()(read_count int,err int){ ....... 阅读全文
posted @ 2013-04-30 22:54 linyilong 阅读(2831) 评论(2) 推荐(2)
摘要: package 指明源文件所在的包func 用于定义函数go里面除了for循环的初始化用到;,其他大部分都不需要go中没有while循环,不过可以利用 for condition来模拟while编译:go builde 编译的文件名定义一个变量,比如字符串var s string = ""go也自动推导出类型var s = "";也可以 s:="":=用在值声明并且初始化05 package main07 import (08 "os"09 "flag" // command line opti 阅读全文
posted @ 2013-04-24 20:21 linyilong 阅读(348) 评论(0) 推荐(0)
摘要: 9.汇总数据:聚集函数:聚集函数运行在行组上,计算和返回单个值的函数SQL给了五个聚集函数:AVG(),返回某列的平均值COUNT(),返回某列的行数MAX(),返回某列的最大值MIN(),返回某列的最小值SUM(),返回某列值之和聚集函数的用法,例如SUM,都是SELECT SUM(*) FROM talbe_name;聚集不同值:DISTINCT:删除重复的行,10.数据分组GROUD BY 关键字SELECT vend_id,COUNT(*) AS num_prodsFROM ProductsGROUP BY vend_id;输出:vend_id num_prodsBRS0 ... 阅读全文
posted @ 2013-04-20 20:10 linyilong 阅读(269) 评论(0) 推荐(0)
上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 13 下一页