dword

Windbg调试----多线程控制调试

ε祈祈猫儿з 提交于 2019-11-30 10:19:42
在调试程序的时候,可能经常会有这样的需求,让一个线程在特定的时候才让其开始执行或者暂停执行。比如复杂的多线程导致死锁的问题,又或者多线程中的Race Condition 导致程序执行异常等。 很多时候,我们可以借助编写调试代码来达到多线程的调试,可是有些情况下调试的执行粒度是指令级别的,那么这个时候我们得借助调试利器Windbg了。本文我们将以 《C/C++编程教训—-函数内静态类对象初始化非线程安全(C++11之前)》 为调试例子 (没看过的同学,可以先看一下这篇博文)。个人觉得这个例子不错,这个调试的执行力度是指令级别的,因为其存在的线程安全问题的代码是编译器生成的,并不是程序员自己的代码。 测试代码 以下这段代码,创建两个线程,这两个线程等待主线程触发的event,然后打印 TestFunction 返回的对象的成员变量 m_iVal 。**正常情况下,两个线程的打印的 m_iVal 都为4。可是在之前博客有提到过, TestFunction() 是非线程安全的,而我们也无法通过增加调试代码来触发这个非线程安全的问题。那么下一章节,我们将通过Windbg来控制线程的执行来触发这个非线程安全的问题。 TestObject TestFunction() { static TestObject obj; return obj; } HANDLE hEvent = NULL ;

多进程

大憨熊 提交于 2019-11-30 09:28:17
#include <iostream> #include <stdio.h> #include <windows.h> #include<fstream> //ifstream using namespace std; HANDLE Empty, Full, Mutex; //声明3个信号量,mutex为互斥信号量,剩下的为同步信号量,同事同步信号量也起到计数器的作用 句柄类型 int x = 0; int y = 0; ofstream outf; DWORD WINAPI produce(LPVOID param) { int j = 0; do { WaitForSingleObject(Empty, INFINITE);//P(Empty) WaitForSingleObject(Mutex, INFINITE);//P(Mutex),形成互斥,生产者、消费者,生产者、生产者;只能一个人占用这个资源 //cout << "produce, "; printf("produce,\n"); outf<<"produce,\n"; j++; ReleaseSemaphore(Mutex, 1, NULL);//V(Mutex),取消互斥,允许其他线程生产,占用此互斥资源 ReleaseSemaphore(Full, 1, NULL);//V(Full),放一个物品到货架

经典内存池c++源代码分享及性能对比研究

会有一股神秘感。 提交于 2019-11-30 09:28:07
最近在写一个IOCP扩展类,遇到内存池问题,网上的完整代码不多,可惜没钱下载,只能自己研究了,自己写了份代码,实现了基本功能,自动增加内存块,可实现较大吞吐量。代码分享出来,请大家交流,帮助优化。目前还只能实现单个对象的管理,大神请指点。 先来看性能对比结果,见下图(代码在后面,可能微博识别的原因导致贴上来后代码有些错误,自己调整): Release模式下,反复循环处理总计5200万个对象,传统new/delete操作花4.29秒,内存池操作花2.1秒,大约是传统new/delete一半时间(若测试方案不同,测试规模增大,速度优势越明显)。 本例中,内部维护了64个块(每个块5mb),总计320Mb,可用单元524万个单元,已用了161万个单元,内存池的内存使用情况和结构由dumpInfo输出, 头文件: #pragma once #ifndef __CL_OBJMEMPOOL_H__ #define __CL_OBJMEMPOOL_H__ //内部锁类,基类 class CLCSLock { public: CLCSLock(void); ~CLCSLock(void); //主锁,请用于线程队列的增加删除操作 void lock(); void unLock(); protected: private: CRITICAL_SECTION *m_cs = 0; };

裸函数

北城余情 提交于 2019-11-30 08:35:09
概述    _declspec(naked)修饰可以生成一个“裸”函数, 使用后C编译器将生成不含函数框架的纯汇编代码,裸函数中什么都没有,所以也不能使用局部变量,只能全部用内嵌汇编实现。 裸函数的定义 1 void __declspec(naked) Function() 2 3 { 4 ... 5 }   _declspec(naked) 的介绍:   _declspec(naked), 就是告诉编译器,在编译的时候,不要优化代码,通俗的说就是, 没代码,完全要自己写   比如: 1 #define NAKED __declspec(naked) 2 3 void NAKED code(void) 4 { 5 __asm 6 { 7 ret 8 } 9 }   使用__declspec(naked)关键字定义函数:   1,使用 naked 关键字必须自己构建 EBP 指针 (如果用到了的话);   2,必须自己使用 RET 或 RET n 指令返回 (除非你不返回);   _delcspec(naked)用在驱动编写,C语言内嵌汇编完成一些特定功能。 实例   我们先通过一个C语言中最简单函数,然后观察反汇编代码,看看编译器为我们做了些什么    编译环境:VmWare Workstation 15 Pro、windows 7、VC++ 6.0 英文版 1 //

基本数据类型的表现形式(地址,指针,引用)

こ雲淡風輕ζ 提交于 2019-11-30 05:52:57
1 必要知识 地址:只有变量才有地址,常量没有地址,除了const定义的伪常量。 指针(TYPE *):任何数据类型都可以定义指针,指针本身也是一种数据类型。由于指针保存的都是地址(32位操作系统下,地址为32位),所以无论什么类型的指针都占据4字节空间。 引用(TYPE&):在C++中不能单独定义,定义就要初始化,是一个变量的别名。 2.指针的工作方式 2.1 指针寻址 因为指针只保存首地址,使用类型修饰符修饰指针(TYPE *),能够解释这个地址中的数据类型,数据类型不同,占用的空间就不同。 举例分析: 1 #include <iostream> 2 3 #pragma warning(disable:4996) 4 5 using namespace std; 6 7 int main() 8 { 9 int Value = 0x12345678; 10 int* iptr = &Value; 11 char* cptr = (char*)& Value; 12 short* sptr = (short*)& Value; 13 14 printf("%08x\n", *iptr); 15 printf("%08x\n", *cptr); 16 printf("%08x\n", *sptr); 17 18 system("PAUSE"); 19 return 0; 20 }

windows的注册表有什么用?

为君一笑 提交于 2019-11-30 05:46:14
注册表是什么 注册表是 Microsoft Windows 中的一个重要的 数据库 ,用于存储系统和应用程序的设置信息。早在Windows 3.0推出OLE技术的时候,注册表就已经出现。随后推出的Windows NT是第一个从系统级别广泛使用注册表的操作系统。但是,从Microsoft Windows 95操作系统开始,注册表才真正成为Windows用户经常接触的内容,并在其后的操作系统中继续沿用至今。 也就是说,注册表是windows的一个综合数据库。对比Linux,windows的软硬件配置等数据库是放置在注册表这一个大的“数据库”中,而Linux则是分散开来的。 注册表有什么用 注册表是windows操作系统中的一个核心数据库, 其中存放着各种参数 ,直接控制着windows的启动、硬件驱动程序的装载以及一些windows应用程序的运行,从而在整个系统中起着核心作用。这些作用 包括了软、硬件的相关配置和状态信息 ,比如注册表中保存有 应用程序和资源管理器外壳的初始条件、首选项和卸载数据等,联网计算机的整个系统的设置和各种许可,文件扩展名与应用程序的关联,硬件部件的描述、状态和属性,性能记录和其他底层的系统状态信息,以及其他数据等 。 如何使用注册表 regedit 或者 regedit.exe regedt32 或者 regedt32.exe 打开后注册表是这个样子的

2019关于phpstudy软件后门简单分析

纵饮孤独 提交于 2019-11-30 05:37:35
2019.9.20得知非官网的一些下载站中的phpstudy版本存在后门文件 说是官网下的就没有后门 20号出现的新闻 今天phpstudy官网21号又更新一波 不太好说这是什么操作哦 此地无银三百两? 很开心的说 我以前的虚拟机装的应该是有后门版本( 任何文件我从来都是官网下文件 ) 用chamd5的检测py 哎~~学个php都被搞哦 跟着大佬团队文章也动手找找后门把 chamd5团队老哥发现是php_xmlrpc.dll中的问题 直接站人家肩膀把 看看这个dll php_xmlrpc.dll @eval函数 .data:1000DE98 gzuncompress函数解密执行payload 以前webshell大马免杀经常用的函数- - .data:1000DE98 函数sub_10003490 145-177行: while ( 1 ) { if ( *(_DWORD *)v13 == 39 ) { v10[v12] = 92; v43[v12 + 1] = *v11; v12 += 2; v13 += 8; } else { v10[v12++] = *v11; v13 += 4; } v11 += 4; if ( (signed int)v11 >= (signed int)asc_1000C66C ) break; v10 = v43; } spprintf(&v43,

显示隐藏文件.reg

♀尐吖头ヾ 提交于 2019-11-30 05:17:07
显示隐藏文件.reg Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] "ShowSuperHidden"=dword:00000001 "Hidden"=dword:00000001 "HideFileExt"=dword:00000000 显示隐藏文件.bat @echo off reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowSuperHidden" /t REG_DWORD /d 1 /f reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "Hidden" /t REG_DWORD /d 1 /f reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f 来源: https://www.cnblogs.com

duilib的属性 大全

こ雲淡風輕ζ 提交于 2019-11-30 03:23:24
<Controls> <Window parent=""> <Attribute name="size" default="0,0" type="SIZE" comment="窗口的初始化大小,如(800,600)"/> <Attribute name="sizebox" default="0,0,0,0" type="RECT" comment="窗口可拖动改变窗口大小的边距,如(4,4,6,6)"/> <Attribute name="caption" default="0,0,0,0" type="RECT" comment="窗口可拖动的标题栏大小的边距,最后一个参数是指离上边框的距离,如(0,0,0,28)"/> <Attribute name="roundcorner" default="0,0" type="SIZE" comment="窗口圆角大小,如(4,4)"/> <Attribute name="mininfo" default="0,0" type="SIZE" comment="窗口最小大小,如(320,240)"/> <Attribute name="maxinfo" default="0,0" type="SIZE" comment="窗口最大大小,如(1600,1200)"/> <Attribute name="alpha" default="255

dword ptr usage confusion

吃可爱长大的小学妹 提交于 2019-11-30 01:53:55
In assembly language if we use mov eax, dword ptr[ebx] then it means copy the value pointed by ebx (ebx contains the address value, not the actual value, this instruction copies the actual value in the address)? If we use mov eax, dword ptr[some_variable] then it means copy the value of variable "some_variable" itself to eax, not copy the value pointed by variable "some_variable"? Is my understanding correct? If yes, I'm confused why the same assembly instruction has two different meansings - in the first case there is a level of indirection, but in the second there is no additional level of