CALLBACK WinMain(HINSTANCE hIns, HINSTANCE hPreIns, LPSTR lpCmdShow, int nCmdShow) { // 旧版本入口用这行 int WINAPI...WM_DESTROY (销毁) 产生时间:窗口被销毁时(不是关闭按钮) 常用于窗口被销毁前做的善后处理,如资源和内存 2....WM_SYSCOMMAND (系统点击) 产生时间:点击最大化、最小化、关闭等产生 返回参数 wParam:具体点击的位置,如 SC_CLOSE 关闭 lParam:鼠标光标位置 LOWORD(lParam...,即没有消息的时间,来做点事) WriteConsole( g_hOutput, "OnIdle", strlen("OnIdles"), NULL, NULL);...WM_DESTROY 窗口被销毁时(不是关闭按钮) 常用于窗口被销毁前做的善后处理,如资源和内存 2.
在游戏地图上,我们打印墙体使用宽字符:□,打印蛇使用宽字符●,打印食物使用宽字符★ 普通的字符是占⼀个字节的,这类宽字符是占用2个字节。...⼀个字节只能表示256种符号,肯定是不够的,就必须使用多个字节表达⼀个符号。...用" "作为第2个参数,调用setlocale函数就可以切换到本地模式,这种模式下程序会适应本地环境。比如:切换到我们的本地模式后就支持宽字符(汉字)的输出等。...printf("默认的本地信息:%s\n", loc); loc = setlocale(LC_ALL, ""); printf("设置后的本地信息:%s\n", loc); return 0...twice++);//这样写只会循环两次 return 0; } 宽字符的打印 那如果想在屏幕上打印宽字符,怎么打印呢?
) //打印日志的地方这样调用 zlog.LogDebug("测试日志") zlog.LogDebug("insert success, last id:%d\n", 123) 和Gin结合 基本封装...log/slog还提供了一个默认的Logger,可以通过顶级函数(如Info和Error)来使用,它们会调用相应的Logger方法。...log/slog的日志记录由以下几个部分组成: 时间:日志记录发生的时间,可以是本地时间或UTC时间。...log/slog还提供了一些有用的特性,如: 可以自定义日志级别、输出目标、格式器(JSON或文本)、时间戳等。 可以使用字段(Fields)来添加结构化的上下文信息,如键值对。...可以使用处理器(Handler)来处理不同级别或条件的日志信息,如过滤、分割、彩色等。
例如: 例子1:MessageBox的使用 windows API对MessageBox的定义如下: WINUSERAPI int WINAPI MessageBoxA( __in_opt HWND..., “Title”, MB_OK); 例子2:OutputDebugString的使用 windows API对OutputDebugString的定义如下: WINBASEAPI VOID WINAPI...一个英文字符(如’s’)用一个char(一个字节)表示,一个中文汉字(如’我’)用2个char(两个字节)表示。 wchar_t被称为宽字符,一个wchar_t占2个字节。...<< endl; } //宽字符测试 void WCharTest() { wcout.imbue(locale("chs"));//将wcout的本地化语言设置为中文 wcout << L"****...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
在标准可以中,依赖地区的部分有以下几项: 数字量的格式 货币量的格式 字符集 日期和时间的表示形式 普通的字符是占一个字节的,这类宽字符是占用2个字节。...一个字节只能表示256种符号,肯定是不够的,就必须使用多个字节表达一个符号。...用" "作为第2个参数,调用setlocale函数就可以切换到本地模式,这种模式下程序会适应本地环境。 比如:切换到我们的本地模式后就支持宽字符(汉字)的输出等。...:%s\n", loc); loc = setlocale(LC_ALL, ""); printf("设置后的本地信息:%s\n", loc); return 0; } 宽字符的打印 那如果想在屏幕上打印宽字符...,怎么打印呢?
dwAutoDetectFlags [in] 使用本地PAC文件协议,假设DHCP和DNS都被检測到,则优先使用DHCP,假设PAC URL 使用DHCP检測不到再使用DNS。...如VPN,LAN, 拔号连接等。 返回值: 当返回false时能够调用getlasterror来得到相关信息。...hConnect [in] 通过调用WinHttpConnect返回的句柄。 pwszVerb [in] HTTP请求动作,如get,post等,假设设为NULL,则默觉得GET请求。...); 作用:请求返回的数据量,以字节为位进行读取。...*pst ); 作用:将本地时间转为系统时间。
Windows服务 创建在 Windows 中的可长时间运行的可执行应用程序。 这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面。...基本写法 需要的有: 服务入口函数: void WINAPI ServiceMain(int argc, char* argv[]) 服务控制函数(暂停、关机一些命令的控制) ServiceCtrlHandler...是它的源码内部实现了服务的创建,暂停,启动等方法。如:ServiceInstall,ServiceStart,ServiceStop等。参见redis源码中的Win32_service.cpp。...(DWORD Opcode); // 服务控制函数(暂停、关机一些命令的控制) DWORD WINAPI ServiceCtrlHandler(DWORD dwControl, DWORD dwEventType...GlobalMemoryStatus(&memstatus); // 获取内存状态信息 availmb = memstatus.dwAvailPhys / 1024 / 1024; // 将获取的字节转化为
bInheritHandle: 若该值为TRUE,则此进程创建的进程将继承该句柄。 dwProcessId: 本地进程的PID。...dwSize: 要分配的内存大小,单位为字节。 flAllocationType: 内存分配类型。具体参数参考官方手册。 flProtect: 要分配的页面区域的内存保护。...lpBaseAddress: 指向指定进程中写入数据的基地址指针。 lpBuffer: 指向缓冲区的指针,其中包含要写入指定进程的地址空间中的数据。 nSize: 要写入指定进程的字节数。...lpNumberOfBytesWritten: 指向变量的指针,该变量接收传输到指定进程的字节数。...若为NULL,则线程获取默认的安全描述符,不能继承该句柄。 dwStackSize: 堆栈的初始大小,以字节为单位。
,如文件类型、目标CPU等。...和 IMAGE_OPTIONAL_HEADER 的大小,并且在内存中的排列情况可能会有填充字节。...之分,不同区别是其中的指针变量,在 32 位下是 4 字节在 64 位下是 8 字节,你也可以用 IMAGE_OPTIONAL_HEADER32 结构体去解析 64 位,其仍然可以正常显示,因为结构体是向后兼容的...Section Header 打印 PointerToRawData + SizeOfRawData 的值验证是否等于我们用 WinAPI GetFileSize 或 ftell 函数计算出来的大小:...执行打印出来 DOS Header、NT Headers、Section Headers 的信息,可以看到用 ftell 计算的文件大小 326656: 最后一个节点打印 PointerToRawData
0x00 远线程注入 远线程注入是指一个进程在另一个进程中创建线程的技术。 0x01 函数介绍 OpenProcess 作用: 打开现有的本地进程对象。...bInheritHandle: 若该值为TRUE,则此进程创建的进程将继承该句柄。 dwProcessId: 本地进程的PID。...lpBaseAddress: 指向指定进程中写入数据的基地址指针。 lpBuffer: 指向缓冲区的指针,其中包含要写入指定进程的地址空间中的数据。 nSize: 要写入指定进程的字节数。...lpNumberOfBytesWritten: 指向变量的指针,该变量接收传输到指定进程的字节数。...若为NULL,则线程获取默认的安全描述符,不能继承该句柄。 dwStackSize: 堆栈的初始大小,以字节为单位。
BOOL WINAPI OpenProcessToken( __in HANDLE ProcessHandle, __in DWORD DesiredAccess, __out PHANDLE...Attributes; } LUID_AND_ATTRIBUTES; LookupPrivilegeValue的原型 BOOL WINAPI LookupPrivilegeValue( _...就是本地名字(这里就填NULL) 第二个参数是特权的名字,要查看详细特权,在这里写SE_DEBUG_NAME 第三个参数就可以通过指针返回一个LUID类型的Luid的标识了。...第二个参数为是否禁用所有所有的特权(这里填false) 第三个参数为新的TOKEN_PRIVILEGES的特权结构体指针 第四个参数是上面结构体的字节长度(sizeof) 第五个参数是...接受原先的特权的结构体 第六个参数也是这个结构体的字节长度的指针 最后要记得调用CloseHandle()函数 我们可以将上述函数组合为一个方法 void EenableDebugPriv()
GetStdHandle(STD_OUTPUT_HANDLE); GetConsoleCursorInfo 检索有关指定控制台屏幕缓冲区的光标⼤⼩和可⻅性的信息 BOOL WINAPI GetConsoleCursorInfo...⽐如:加⼊了宽字符的类型 wchar_t 和宽字符的输⼊和输出函数,加⼊了头⽂件,其中提供了允许程序员针对特定 地区(通常是国家或者说某种特定语⾔的地理区域)调整程序⾏为的函数。...比如切换为本地模式: setlocale(LC_ALL, " ");//切换到本地环境 宽字符的打印 宽字符的字⾯量必须加上前缀“L”,否则C语⾔会把字⾯量当作窄字符类型处理。...(⾏和列可以根据⾃⼰的情况修改),再围绕地图画出墙 蛇⾝和⻝物 初始化状态,假设蛇的⻓度是5,蛇⾝的每个节点是●,在固定的⼀个坐标处,⽐如(24,5)处开始出现 蛇,连续5个节点。...} int main() { //修改当前地区为本地模式,为了⽀持中⽂宽字符的打印 setlocale(LC_ALL, ""); //测试逻辑 test(); return 0; } 游戏开始
(HWND hWnd,LPARAM lParam);//枚举记事本中的子窗口 char mess[999999]; int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE...窗口,打印进程信息 return 0; } else { ::MessageBox(NULL,"please open notepad","error...,WM_SETTEXT,0,(LPARAM)mess); return 0; } } return true; } 程序读取400000地址4个字节的数据...(HWND hWnd,LPARAM lParam);//枚举记事本中的子窗口 char mess[999999]; int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载:https://vanmieghem.io/blueprint-for-evading-edr-in-2022/ Shellcode 加密 减少熵 逃离(本地)反病毒沙箱 导入表混淆 禁用 Windows...逃离(本地)AV 沙箱 许多 EDR 解决方案将在本地沙箱中运行二进制文件几秒钟以检查其行为。...我们添加 WINAPI 调用的函数签名,获取 WINAPI 的地址,ntdll.dll然后创建一个指向该地址的函数指针: typedef BOOL (WINAPI * pVirtualProtect)(...ETW 允许对进程的功能和 WINAPI 调用进行广泛的检测和跟踪。...NtAlocateVirtualMemory这很棒,因为我们绕过了任何用于监控VirtualAlloc对ntdll.dll.
HANDLE GetStdHandle(DWORD nStdHandle); ②GetConsoleCursorlnfo 检索有关指定控制台屏幕缓冲区的光标大小和可见性的信息 BOOL WINAPI...BOOL WINAPI SetConsoleCursorPosition ( HANDLE hConsoleoutput, COORD pos ); 我们将想要设置的坐标信息放在pos...因为x轴的1和y轴的1的长度不同,y轴的1的长度约等于x轴的1的两倍 x=y=1时: x=2,y=1时: 我们可以明显看出格子的区别 在宽字符打印之前我们要进行本地化 (1)本地化 包含头文件...category, const char* locale); 该函数用来修改当前地区 第一个 第二个参数仅定义了两种可能的取值: “C”正常模式 “ ”本地模式 切换到本地模式就可以支持宽字符的打印...setlocale(LC_ALL, "C");//正常模式 setlocale(LC_ALL, " ");//本地模式 (4)宽字符的打印 可以把宽字符看做是长的字符 #include <stdio.h
4.1.C语言中的宽字符 1、常用函数 char wchar_ t //多字节字符类型 宽字符类型 printf wprintf //打印到控制台函数 strlen wcslen //获取长度...编码 int MessageBox( HWND hWnd, //所有者窗口的句柄 LPCTSTR IpText, //消息框中的文本地址 LPCTSTR IpCaption, //消息框标题的地址...进程提供程序所需的资源,如:数据、代码等等。 2、进程内存空间的地址划分 ?...char szOutBuff[0x80]; sprintf(szOutBuff,"Error: %d",GetLastError()); OutputDebugString(szOutBuff) 4、打印当前程序的入口地址...: 名字是一段程序就精华的注释,通过名字可以直接猜测到函数的功能通过使用序号,可以达到隐藏的目的 3、dll的创建和使用 步骤1: : //定义函数指针如: typedef int (_stdcall
——user32的API winnt.h——UNICODE字符集支持 相关函数 int WINAPI wWinMain( HINSTANCE hInstance,//当前程序的实例句柄,找到你当前进程所占据的那块内存...宽字节数据类型 这个数据类型下的所有字符, 都占2个字节。...打印UNICODE字符 UNICODE字符打印,wprintf对UNICODE字符打印支持不完善。 在windows下使用WriteConsole打印UNICODE字符。...打印 ---- 消息循环的原理 消息循环的阻塞 GetMessage-从系统获取消息,将消息从系统中移除,阻塞函数。...定义线程处理函数 DWORD WINAPI ThreadProc( LPVOID lpParameter//创建线程时,传递给线程的参数。
dwMilliseconds // time-out interval in milliseconds ); 参数解析: DWORD 就是 Double Word, 每个word为2个字节的长度...,DWORD双字即为4个字节,每个字节是8位。...如设为零,表示立即返回。...如指定常数INFINITE,则可根据实际情况无限等待下去 函数的返回值有: WAIT_ABANDONED_0:所有对象都发出消息,而且其中有一个或多个属于互斥体(一旦拥有它们的进程中止,就会发出信号...)由于一个I/O完成操作已作好准备执行,所以造成了函数的返回 返回WAIT_FAILED则表示函数执行失败,会设置GetLastError 如bWaitAll为FALSE,那么返回结果相似,只是可能还会返回相对于
如何用Python编写客户端程序 说明 1、导入套接字模块,然后创建套接字,就像创建服务器一样。 然后,为了在客户端-服务器之间创建连接,您需要通过指定(主机和端口)使用connect()方法。...(LAN-本地IP/WAN-公共IP) 2、客户端想从服务器接收一些信息。 因此,您需要使用recv()方法,并将信息存储在另一个变量msg中。...请记住,传输的信息将以字节为单位,在上述程序的客户端中,一次传输最多可以接收1024个字节(缓冲区大小)。可以指定任意数量,这取决于传输的信息数量。 3、正在传输的信息应该解码和打印。...s.connect((socket.gethostname(), 2346)) msg=s.recv(1024) print(msg.decode("utf-8")) 以上就是用Python编写客户端程序的方法
pragma message 该指令能够让编译器遇到这条指令时就在编译输出窗口中将消息文本打印出来。...如 pragma comment(lib, “my.lib”) pragma hdrstop 该指令表示预编译头文件到此为止,后面的头文件不进行预编译。...pragma resource 该指令表示把指定文件中的资源加入工程,如 pragma resource “*.dfm” pragma code_seg 该指令能够设置程序中函数代码存放的代码段...宏是一个头部注解,藐视了一些类型.如何用作函数的参数以及返回值....HANDLE WINAPI GetStdHandle( _In_ DWORD nStdHandle ); _In_其实没有什么实际一样,只是标识这里是一个接受输入的。
领取专属 10元无门槛券
手把手带您无忧上云