YiMiTuMi

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

软件调试--调试器程序框架

c++

调试器程序框架 这个调试器主要是测试支线软件调试的内容,只是一个具体框架,没有实现很复杂的细节。 软件调试原理 实现了: 1)软件断点 在进程开始的位置加的断点用于测试。 2)硬件断点 在软件断点中断后,在其后面的地址又加了硬件断点,因为硬件断点需要线程启动后才能添加,测试时只有在软件断点后确保线程启动了后才加的断点。换成内存断点后面也可以。 3)内存断点 在进程开始的...

PE-修复IAT表

c++

修复IAT表 很多情况下我们会用到修复IAT表: 1)获取到PE文件中要修改的IAT的地址 2)获取要修改地址的DLL和函数名 3)在对应DLL中查找到要修改的函数的地址 4)修改对应函数的地址 内核程序 //修复IAT表 NTSTATUS RepairImportTable(PVOID pBaseAddress) //接受一个文件地址 { //DbgPrint(" go g...

Windows异常处理

c++

Windows异常处理 异常与调试是紧密相连的,异常是调试的基础。 异常产生后,首先是要记录异常信息(异常的类型、异常发生的位置等),然后要寻找异常的处理函数,我们称为异常的分发,最后找到异常处理函数并调用,我们称为异常处理。 异常调用流程: 记录异常信息 → 异常的分发 → 异常处理 异常的分类: 1)CPU产生的异常(如除零) 2)软件模拟产生的异常 异常的分发与处理:...

获取磁盘容量

c++

获取磁盘容量 保存磁盘容量结构体: //磁盘信息 typedef struct _DISK_DATA_INFO { wstring strDiskPath; //磁盘路径 DWORD64 dwDiskTotalCapacity; //磁盘总容量 (字节) DWORD64 dwDiskUseCapacity;//磁盘使用容量 (字节) DWORD64 dwDi...

修改控件文本颜色

c++

修改控件文本颜色 StaticText测试可以,其余没有测试。 定义: afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor); 事件: ON_WM_CTLCOLOR() 实现: HBRUSH CxxxDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColo...

事件等待

c++

原子操作 全局变量: DWORD dwVal = 0; 线程中的代码: dwVab++; 这行代码是不安全的,因为对应的汇编代码为(单核多核都不安全): mov eax, [0x12345678] add eax, 1 mov [0x12345678], eax 当代码在执行最后的mov前发生线程切换就会导致最后dwVab返回的值出现错误,并不安全,因为线程切换会发生...

PE-基址重定位与重定位表

c++

基址重定位 当链接器生成一个PE文件时,会假设这个文件在执行时被装载到默认的基地址处,并把 code 和 data 的相关地址都写入PE文件。如果载入时将默认的值作为基地址载入,则不需要重定位。但是,如果PE文件被装载到虚拟内存的另一个地址中,连接器登记的那个地址就是错误的,这时就需要用重定位表来调整。在PE文件中,重定位表往往单独作为一块,用“.reloc”表示。 PE格式不参考外部D...

基于NTFS磁盘快速查找

c++

基于NTFS磁盘快速查找 关于NTFS查找的原理建议自行百度查找,这里写了一个类进行查找,一个盘一个线程。 后面可以将类写成一个单例,然后将除了线程外的函数写到类里。(这里懒了) TraverSalFile.h TraverSalFile.h类的头文件: #include <Windows.h> #include <WinIoCtl.h> #include...

插入、调用APC函数详解

c++

APC插入过程分析 APC不论从3环插入还是从0环插入都会调用内核层函数: QueueUserAPC(Kernel32.dll) ↓ ↓ → 用户层调用 NtQueueApcThread(ntosker.exe) ↑ ↓ KeInitializeApc(分配空间,初始化KAPC结构体) ↓ ↓ ...

APC的本质

c++

APC的本质 线程是不能被“杀掉”、“挂起”、“恢复”的,线程在执行的时候自己占据着CPU,别人是不可能控制它的。 例如:如果线程不调用API,屏蔽中断,并保证代码不会出现异常,线程将永久占用CPU,所以说线程如果想停止,一定时自己执行代码把自己干掉,不存在被别的线程干掉的情况。 如果想改变一个线程的行为,操作系统给线程提供了一个函数,让线程自己去调用,这个函数就是APC(Asyncr...