YiMiTuMi

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

软件调试

c++

调试 调试对象: 用于调试器与被调试程序之间建立起联系。 调试的本质:被调试程序触发异常–调试器接管异常的过程。 调试器与被调试程序之间建立起联系 当使用调试器调试未启动的程序时,调用: CreateProcess 当使用调试器调试已启动程序时,调用: DebugActiveProcess 注意:这两个函数都是调试器的进程在调用。 _DEBUG_OJECT 结构体 t...

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

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结构体) ↓ ↓ ...