YiMiTuMi

使我进步的不是谦虚,而是别人羡慕我时我的那份骄傲!

动态获取SSTD,并打印函数名、调用编号、函数地址

c++

动态获取KeServiceDescriptorTable(SSDT) 在windows系统中,32位系统是导出了SSTD的,我们可以通过全局的KeServiceDescriptorTable去获取: extern PKSERVICE_TABLE_DESCRIPTOR KeServiceDescriptorTable; //只有在32位才能导出 在64位系统中,并没有导出函数地址...

获取SSTD函数调用索引号和ntoskrnl.exe函数地址

c++

获取SSTD函数调用索引号 参考 Windows在调用系统API时,通过ntdll.dll文件中的函数进入内核,每个函数在进入内核时都会有一个调用编号,这个调用编号被存放在eax中,windows通过这个编号在SSTD中查找对应的函数地址。 注意:ntdll.dll 导出表的函数编号并不是SSTD的函数编号,两者并不对应。并且已经公开的函数大多数是以NT开头的,还有一些为公开的是ZW。...

获取空闲端口号、判断是否在同一网段

c++

获取空闲端口号 当我们使用端口时要获取空闲的端口,端口数量最大为65536个。 通过Bind函数获取 SOCKET s = socket(AF_INET,SOCK_STREAM,IPPROTO_IP); sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = htons(usPort); addr.sin_addr.s_...

驱动安装工具

c++、MFC

实现自己的驱动工具 用C++写了一个通用的类,之后用MFC写的界面调用的。主要就是掉函数安装。 C++类 CInStallDriver.h #include <WinSvc.h> #include <string> using namespace std; class CCInStallDriver { public: CCInStallDriver(v...

保护模式(二)--页机制

c++

页 保护模式主要保护内存靠段和页的机制,段保护简单点说就是一个寄存器去访问一个虚拟地址跨段之间的保护,页保护是通过虚拟地址去查找物理地址时,对当前地址的读写等保护。 在X86处理器中地址分段模式包括一下2种形式: 1)平坦模式:在平坦模式下,系统能访问一个连续的、不分段的地址空间,所有的段被映射到同一个地址空间(虚拟的),所有的段都有相同的基地址0,界限为4GB(32位)。我们所使用的...

遍历系统所有加载的驱动

c++

遍历系统所有加载的驱动 遍历系统中的驱动可以采用两种方式: 1)每个驱动都有一个 _DRIVE_OBJECT 成员,这个成员,用 WinDbg 打印出来是这样的: kd> dt _DRIVER_OBJECT 85696180 ntdll!_DRIVER_OBJECT +0x000 Type : 0n4 +0x002 Size ...

保护模式(一)--段机制

c++

保护模式–段机制 保护模式主要保护内存靠段和页的机制,段保护简单点说就是一个寄存器去访问一个虚拟地址跨段之间的保护,页保护是通过虚拟地址去查找物理地址时,对当前地址的读写等保护。 在X86处理器中地址分段模式包括一下2种形式: 1)平坦模式:在平坦模式下,系统能访问一个连续的、不分段的地址空间,所有的段被映射到同一个地址空间(虚拟的),所有的段都有相同的基地址0,界限为4GB(32位)...

MFC线程使用

c++

MFC线程使用 一般用线程查找一些文件,然后发消息出去插入到MFC的List中,一般配合虚拟列表使用比较好。 注意:MFC不能在子线程内操作控件,所以要发出去。 定义一个消息: #define WM_FILE_INFO WM_APP +108 建一个线程: void FileInfoFunctionDlg::FindList() { HANDLE hThread =...

CFindReplaceDialog查找List列表

c++

CFindReplaceDialog查找List列表 通过调用CFindReplaceDialog来查找List列表里的数据,对每一行的每一列都进行查找。 实现 定义: virtual BOOL PreTranslateMessage(MSG* pMsg); afx_msg LONG OnFindReplace(WPARAM wParam, LPARAM lParam); void ...

EFFECTIVE+STL:50条有效使用STL的经验总结

c++

EFFECTIVE+STL中文版:50条有效使用STL的经验总结 1.vector是默认应使用的序列类型。 2.当需要频繁的在序列中间做插入和删除操作时,应使用list。 3.当大多数插入和删除操作发生在序列的头部和尾部时,deque是应考虑的数据结构。 4.连续内存容器(基于数组的容器):把它的元素存放在一块或多块(动态分配的)内存中,每块内存中存有多个元素。当有新元素插入或已有的...