dword

win10 向右键添加管理员级CMD

匿名 (未验证) 提交于 2019-12-03 00:13:02
新建txt文件,写入以下内容 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Directory\Background\shell\runas] "ShowBasedOnVelocityId"=dword:00639bc8 [HKEY_CLASSES_ROOT\Directory\Background\shell\runas\command] @="cmd.exe /s /k pushd "%V"" 另存,改后缀reg,双击加入注册表 来源:博客园 作者: 夕殿墨寒 链接:https://www.cnblogs.com/hello-bug/p/11642164.html

裸函数

匿名 (未验证) 提交于 2019-12-03 00:11:01
概述    _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-12-02 23:55:01
外挂 记得小学的时候玩页游把家里电脑弄坏了(怎么回事,页游还能弄坏电脑?),然后我爸拿去重新装了系统,回来之后电脑里有了两个新的单机游戏,植物大战僵尸和大鱼吃小鱼。 那个年代周围的小学生都是赛尔号/奥比岛/洛克王国/天书奇谭/龙之刃/梦幻西游,玩摩尔庄园的小学生说出来都不是九年义务教育的。植物大战僵尸虽然现在看来比较久远,但他的游戏元素却是推生出许多游戏音乐文化,比如Billie Eilish的《bad guy》,节奏简直就是植物大战僵尸的 灯 灯 灯 灯 灯灯~ 了。 当时因为生存模式被虐,在网上找了修改器,可以修改阳光点数,那时候虽然没学计算机专业,但对修改器的运行机制还是有所猜测的,当时小学因为不知道内存这回事,所以是觉得修改的文件中的数据。 这个猜测如今看起来很搞笑,但也不失道理(要开始狡辩了),有些游戏的数据可能是先放在文件中的,在游戏启动之后把文件中的数据读取到游戏的内存区域,所以我们需要先修改数据所在的文件内容,然后启动游戏,但是很多游戏的数据文件是加密的(出大问题,骑马与砍杀就没有加密),我们没办法从文件进行修改,所以需要让游戏进程先把它读到内存,然后从内存修改,然后再退出游戏的时候游戏进程自动把它保存下来,之后也就是这个数据了。 所以综上可以发现有这几类修改对象: 游戏数据在本地未加密文件,直接修改它来修改游戏数据 这一类的代表就是骑马与砍杀,它的角色数据在文档中

win32多线程: 线程创建与结束等待

匿名 (未验证) 提交于 2019-12-02 23:51:01
1 #include <Windows.h> 2 #include <iostream> 3 4 using namespace std ; 5 6 /*1、在启动一个线程之前,必须为线程编写一个全局的线程函数, 7 * 这个线程函数接受一个32位的LPVOID(没有类型的指针)作为参数,返回一个DWORD 8 *这里建了两个全局的线程函数ThreadFuncFirst,ThreadFuncSecond*/ 9 DWORD WINAPI ThreadFuncFirst ( LPVOID param ) { //DWORD:32位无符号整型数据(DWORD32), VOID:无类型,相当于标准C语言中的void,LPVOID无类型指针 10 int iCount = 100 ; 11 //2、 在线程处理代码部分通常包括一个死循环,该循环中先等待某事情的发生,再处理相关的工作 12 while ( iCount --) { 13 cout << "ThreadFuncFirst:" << iCount << endl ; 14 } 15 return 0 ; 16 } 17 18 DWORD WINAPI ThreadFuncSecond ( LPVOID param ) 19 { 20 int iCount = 150 ; 21 while ( iCount --) { 22

异常相关数据结构

匿名 (未验证) 提交于 2019-12-02 23:49:02
当一个异常发生时,操作系统要向引起异常的线程的栈里压入三个结构,这三个结构是:E X C E P T I O N _ R E C O R D结构、C O N T E X T结构和E X C E P T I O N _ P O I N T E R S结构。 一、E X C E P T I O N _ R E C O R D 这个结构包含有关最近发生的异常的详细信息,这些信息独立于C P U,定义如下: typedefstruct_EXCEPTION_RECORD { DWORD ExceptionCode; DWORD ExceptionFlags; struct_EXCEPTION_RECORD *ExceptionRecord; PVOID ExceptionAddress; DWORD NumberParameters; ULONG_PTR ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]; } EXCEPTION_RECORD; ExceptionCode :包含异常的代码。这同内部函数G e t E x c e p t i o nCo d e()返回的信息是一样的。这是一个硬件异常产生的代码或者由RaiseException函数指定产生的软件异常码。 ExceptionFlags: 包含有关异常的标志。当前只有两个值

PE对齐粒度

匿名 (未验证) 提交于 2019-12-02 23:39:01
按照内存对齐粒度读取到内存,不足的用0填充。 文件对齐粒度 200 内存对齐粒度 1000 对齐后的大小 //以dwAlignment 对齐dwOperateNum 值,也就是让dwOperateNum为dwAlignment的整数倍 DWORD AlignmentNum(DWORD dwOperateNum, DWORD dwAlignment ) { if (dwAlignment == 0) { return dwOperateNum ; } int iTemp = dwOperateNum % dwAlignment; if (iTemp != 0) { return dwOperateNum + dwAlignment - iTemp; } return dwOperateNum ; } 文章来源: https://blog.csdn.net/dyxcome/article/details/91358028

PE解析导出表--代码

匿名 (未验证) 提交于 2019-12-02 23:39:01
//导出表信息 typedef struct _EXPORT_INFO { char cDllName[256]; //用于保存DLL库名 pFuncInfo pFunctionInfo; //指向FUNC_INFO结构体数组,用于保存若干个函数信息 long lFuncNum; //pFunctionInfo所指向数组的个数 _EXPORT_INFO() { pFunctionInfo = NULL; lFuncNum = 0; memset(cDllName, '\0', 256); } }*pExportInfo, EXPORT_INFO; //得到导出表的信息:导出库名,导出函数ID,导出函数地址 void CPe32 ::GetExportTableInfo() { if (m_bSuccess) { //得到导出目录结构 IMAGE_DATA_DIRECTORY ExportDataDirectory = m_pPeHeader->OptionalHeader.DataDirectory[0]; //如果不存在导出表则返回 if (ExportDataDirectory.VirtualAddress == 0) { return ; } //得到文件中导出表结构指针 IMAGE_EXPORT_DIRECTORY *pExportDescriptor = ( IMAGE

开启admin$共享

匿名 (未验证) 提交于 2019-12-02 23:30:02
运行regedit,进入下面键值: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters,新建 AutoShareWks,以及AutoShareServer两个键值,选择REG_DWORD格式,赋值为1 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa 新建restrictanonymous,dword,赋值1。 然后重启,通过运行CMD命令进入命令行模式,再运行net share,在共享列表中会看到Admin$、C$\IPC$ 等默认共享。

Windows下串口编程

匿名 (未验证) 提交于 2019-12-02 23:05:13
将Windows下串口编程相关信息进行下简单小结,以备后用。 1、打开串口 打开串口使用 CreateFile() 函数。以打开COM6为例: HANDLE hComm; hComm = CreateFile( TEXT("COM6"), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); - "COM6" ,为待打开串口的串口名 。 - GENERIC_READ | GENERIC_WRITE ,为串口读写权限。 - 0,固定值。 - NULL ,指向SECURITY_ATTRIBUTES的指针。通常设置为NULL,此时CreateFile()函数返回的句柄不能被子进程继承。 - OPEN_EXISTING,固定值。 - FILE_ATTRIBUTE_NORMAL ,文件属性。 - NULL,固定值。 - hComm ,函数返回的句柄。如果打开串口成功,则在后续操作中使用该句柄访问串口。如果打开串口失败,函数返回句柄为 INVALID_HANDLE_VALUE 。 这里需要额外说明两点 一是 CreateFile()、CreateFileA() 1 和CreateFileW() 2 的区别 。在大部分说明如何使用Win32

win32API多线程编程

蹲街弑〆低调 提交于 2019-12-02 19:12:38
win32线程API 在Windows平台下可以通过Windows的线程库来实现多线程编程。 对于多线程程序可以使用Visual Studio调试工具进行调试,也可以使用多核芯片厂家的线程分析调试工具进行调试。 Win32 API(了解Windows,代码小,效率高) Windows操作系统为内核以及应用程序之间提供的接口 将内核提供的功能进行函数封装 应用程序通过调用相关的函数获得相应的系统功能 _beginthread _beginthread(函数名,栈大小,参数指针) Win32 函数库中提供了操作多线程的函数, 包括创建线程、管理线程、终止线程、线程同步等接口。 线程函数(线程开始执行的函数) DWORD WINAPI ThreadFunc (LPVOID lpvThreadParm ); 线程创建 HANDLE CreateThread ( LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId ); 第一个参数lpThreadAtt,是一个指向SECURITY- ATTRIBUTES结构的指针