线程控制 实验 挂起线程 ::SuspendThread(hThread); 恢复线程 ::ResumeThread(hThread); 终止线程 (这里讲了同步调用与异步调用) 方式一: 此方法结束线程会自动清理堆栈 ::ExitThread(DWORD dwExitCode); 方式二: 线程函数返回 方式三: 而此方法结束线程不会自动清理堆栈 ::TerminateThread(hThread,2); ::WaitForSingleObject(hThread,INFINITE); 判断线…
向代码节添加代码实现 作者经过一周不断的失败,再思考以及无数次调试终于实现. 思路:八个步骤 1. 文件拷到文件缓冲区(FileBuffer) //图示见(零基础逆向工程18之PE加载过程) 2. 文件缓冲区扩展到内存映像缓冲区(ImageBuffer) 3. 判断代码空闲区是否有足够空间存储ShellCode代码 4. 将代码复制到空闲区 5. 修正E8 6. 修正E9 7. 修改OEP 8. 内存映像缓冲区到新文件缓冲区(NewBuffer) 9. 新文件缓冲区到文件 向其他节(如数据段)空…
1 信号量 信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用.[百度百科] 1.1 创建信号量 HANDLE CreateSemaphore( LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, LONG lInitialCount, LONG lMaximumCount, LPCTSTR lpName ); 函数说明: 第一个参数表示安全控制,一般直接传入NULL. 第二个参数表…
1 内核对象 前面已经学过线程和互斥体两个内核对象.此节讲了事件这个内核对象.前面提出了内核对象这个概念,可能不太清晰,简单来说内核对象就是系统层的东西. 1.1 小结内核对象: 进程.线程.事件.互斥体.文件.文件映射等. 1.2 事件内核对象的创建 HANDLE g_hEvent = CreateEvent(NULL, TRUE, FALSE, "XYZ"); HANDLE g_hMutex = CreateMutex(NULL,FALSE, "XYZ"); 1…
1 引言 讲了第二个内核对象,互斥体.前面已经学过一个内核对象,线程.这节讲两个函数,WaitForSingleObject()和WaitForMultipleObjects().因此这两个函数是根据内核对象的状态来进行操作的. 临界区:一个进程里面对线程进行互斥的控制. 互斥体:实现跨进程的互斥的控制.多个进程抢同一个全局变量,怎样保证最终只有一个进程来用. 2 ForSingleObject() DWORD WaitForSingleObject( HANDLE hHandle, // ha…
1 引入 为什么会存在临界区这中机制呢?是为多线程同时访问全局变量而引入的.也就是上一篇帖子的末尾流出的问题程序的解决办法. 看懂了上面的,那么我们再罗嗦总结一下: 1.多线程访问全局变量时,存在线程安全问题. 2.局部变量不存在线程安全问题. 2 临界区的使用 2.1 创建CRITICAL_SECTION: CRITICAL_SECTION cs; 2.2 在使用前进行初始化 InitializeCriticalSection(&cs); 2.3 在函数中使用 DWORD WINAPI 线程A…
1 什么是线程(Threads)? 什么是多线程? 怎么在windows中观察多线程? 线程可以简单理解为主程序为解决一个问题而选择的其中一条路线. 同理,多线程就是同时选择不同的路线来解决此问题. windows可在任务管理器中,"选择列"选项中选择"线程"即可查看进程的线程. 2 创建线程 HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, // 安全属性 通常为NULL SIZE_T d…
导入表结构 typedef struct _IMAGE_IMPORT_DESCRIPTOR { union { DWORD Characteristics; DWORD OriginalFirstThunk; //RVA 指向IMAGE_THUNK_DATA结构数组 }; DWORD TimeDateStamp; //时间戳 DWORD ForwarderChain; DWORD Name; //RVA,指向dll名字,该名字已0结尾 DWORD FirstThunk; //RVA,指向IMAG…
结构体小结 结构体是按照分配的大小,局部变量会自动数据对齐 1字节对齐,省空间,但cpu查找效率低 4字节对齐,不省空间,但cpu查找效率高 VC6默认的结构对齐大小 项目右键-> setting-> C/C++ ->Code Generation 如果这个值比结构体成员的sizeof值小,那么该成员的偏移量应该以此为准, 即,结构体成员的偏移量应该取二者的最小值 对齐原则 原则一:数据成员对齐规则:结构的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置…
重定位表 待补充 IAT表 待补充…