WindowsAPI查缺补漏-进程
WindowsAPI查缺补漏-进程创建进程ShellExecute打开i可执行文件、文档文件、网址等。
12345678HINSTANCE ShellExecute( _In_opt_ HWND hwnd, //父窗口句柄 _In_opt_ LPCTSTR lpOperation, //指定的操作 _In_ LPCTSTR lpFile, //要操作的文件或文件夹 _In_opt_ LPCTSTR lpParameters, //当lpFile为可执行文件时 为命令行参数 _In_opt_ LPCTSTR lpDirectory, //要操作的文件的默认工作目录 _In_ INT nShowCmd //显示标志)
lpOperation可以是:
枚举值
含义
open
由关联的默认程序打开lpFile文件/文件夹
explore
资源管理器打开lpFIle文件夹
edit
用编辑器(记事本)打开lpFile指定的文档,不是文档则调用失败
print
打印lpFile指定的文件,不是文档文件则失败
find
从l ...
WindowsAPI查缺补漏-文件驱动器目录
WindowsAPI查缺补漏-文件驱动器目录碎碎念硬盘容量=柱面数(磁道数)*磁头数(盘面数)*每磁道扇区数*每扇区字节数。
目录SetCurrentDirectory设置当前目录:
123BOOL SetCurrentDirectory( LPCTSTR lpPathName)
GetCurrentDirectory获取当前目录:
1234DWORD GetCurrentDirectory( _In_ DWORD nBufferLength, //缓冲区大小 单位字符 _Out_ LPTSTR lpBuffer //返回当前目录)
GetFullPathName获取一个文件完整路径:
123456DWORD WINAPI GetFullPathName( _In_ LPCTSTR lpFileName, //文件名称 _In_ DWORD nBufferLength, //缓冲区大小 单位字符 _Out_ LPTSTR lpBuffer, //返回完整路径文件名 _Outptr_opt_ LPTSTR* lpFilePart //返回文件名起始地址指针)
文件操作Cr ...
WindowsAPI查缺补漏-内存管理
WindowsAPI查缺补漏-内存管理碎碎念x64下虚拟地址空间空指针赋值分区,为0x00000000`00000000~0x00000000`0000FFFF,大小约为64KB。用于帮助开发人员捕捉对NULL指针的赋值,例如这样malloc失败时返回NULL,帮助开发人员调错:
12LPINT pInt = (LPINT)malloc(sizeof(INT));*pInt = 5;
用户模式分区,为0x00000000`00010000~0x00007FFF`FFFFFFFF,大小约为128TB。用于每个进程使用,动态链接库也装载到这里,需要内存管理单元MMU将虚地址映射为物理地址。因为这分区用不着这么大,操作系统选择不支持,如Windows Server 2016只支持24TB,Windows 10只支持8TB。
64KB禁入分区,为0x00007FFF`FFFF0000~0x00007FFF`FFFFFFFF,大小约为64KB。Windows系统保留,禁止访问。
内核模式分区,为0x00008000`00000000~0xFFFFFFFF`FFFFFFFF,大小约为167772 ...
WindowsAPI窗口程序设计-常用控件
WindowsAPI窗口程序设计-常用控件按钮类本篇搞一个全是按钮的页面,从上到下分别是普通按钮、图标按钮、位图按钮和自绘按钮,接下来是三个分组框。第一个叫政治面貌,里面有一组单选按钮,分别是中共党员、共青团员、无党派人士。第二个叫个人爱好,里面有3个多选框,分别是看书、唱歌、听音乐。第三个叫荣誉称号,里面有三个三态多选框,即有对勾、有灰色对勾和无对勾,分别是团队核心、技术能手和先进个人。最后有个默认按钮为获取单选复选状态。
常用按钮样式:
枚举值
含义
BS_PUSHBUTTON
普通按钮
BS_NOTIFY
系统发送带有BN_KILLFOCUS和BN_SETFOCUS通知码的WM_COMMAND消息到父窗口
BS_ICON
图标按钮
BS_BITMAP
位图按钮
BS_OWNERDRAW
自绘按钮,按钮需要重绘时父窗口收到WM_DRAWITEM消息
BS_GROUPBOX
分组框
BS_AUTORADIOBUTTON
自动单选窗口
BS_AUTOCHECKBOX
自动复选框
BS_AUTO3STATE
自动三态复选框
BS_DEFPU ...
WindowsAPI窗口程序设计-菜单与资源
WindowsAPI窗口程序设计-菜单与资源菜单-菜单资源法开始在资源文件区新建.rc资源文件,在Menu字样下新建一个菜单IDR_MENU,然后就可以可视的方式设计菜单。双击每个菜单项,在属性窗口中设置ID,例如ID_FILE_NEW、ID_FILE_OPEN等。
菜单添加法一:设置WNDCLASSEX结构的lpszMenuName字段,需要把IDR_MENU转为LPCTSTR类型。
1wcex.lpszMenuName = MAKEINTRESOURCE(IDR_MENU);
法二:创建窗口时指定hMenu参数:
123HMENU hMenu;hMenu = LoadMenu(hInstance, MAKEINTRESOURCE(IDR_MENU));HWND hWnd = CreateWindowEx(0, szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 300, 180, NULL, hMenu, hInstance, NULL);
其中LoadMenu用来加载菜单资源:
...
WindowsAPI窗口程序设计-基础语法
WindowsAPI窗口程序设计-基础语法基本概念WinMain入口函数。
123456INT WINAPI _tWinMain( _In_ HINSTANCE hInstance, //应用程序当前实例句柄 _In_opt_ HINSTANCE hPrevInstance, //废弃 _In_ LPSTR lpCmdLine, //命令行参数字符串 不包括可执行文件名 _In_ INT nShowCmd //该程序最初怎么显示);
MessageBox消息提示框。
123456INT WINAPI MessageBox( _In_opt_ HWND hWnd, //所有者窗口句柄 _In_opt_ LPCTSTR lpText, //显示的消息内容 _In_opt_ LPCTSTR lpCaption, //标题 _In_ UINT uType //图标按钮样式)
按钮取值:
12345678MB_ABORTRETRYIGNOREMB_CANCELTRYCONTINUEMB_HELPMB_OKMB_OKCANCELMB_RETRYC ...
ImGUI开发入门实战
ImGUI开发入门实战此篇已废弃,不想学这个了。
简介ImGUI已在Github上开源,分为主分支和docking分支。主分支需要在控制台窗口的基础上,新建绘制窗口,窗体绘制在该窗口中。主分支可以用来游戏写挂,例如将绘制窗口透明、外部绘制并大小位置跟随游戏变换。docking主要用来制作桌面软件。
开始去Github上下载ImGUI,把里面根目录的各个.cpp和.h都拿出来。在backends目录下还需要imgui_impl_dx12(DirectX12)那俩和imgui_impl_win32的。
链接器的附加依赖项要有d3d12.lib、d3dcompiler.lib、dxgi.lib。
然后模板直接抄example_win32_directx12就行…
main.h:
1234567891011121314151617#pragma once#include "imconfig.h"#include "imgui.h"#include "imgui_impl_dx12.h"#include "imgui_impl ...
WindowsAPI查缺补漏-多线程
WindowsAPI查缺补漏-多线程线程创建与销毁CreateThread在当前进程创建新线程。
12345678HANDLE WINAPI CreateThread( _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes, //线程安全属性结构 _In_ SIZE_T dwStackSize, //线程栈空间大小 _In_ LPTHREAD_START_ROUTINE lpStartAddress, //线程函数指针 _In_opt_ LPVOID lpParameter, //传递给线程函数的参数 _In_ DWORD dwCreationFlags, //线程创建标志 _Out_opt_ LPDWORD lpThreadId //返回线程ID)
例子:
123456HANDLE hThread;hThread = ::CreateThread(NULL, 0, ThreadProc, NULL, 0, NULL);if (hThread != NULL) { ::CloseHandle(hThread); hThread ...
保护模式入门
保护模式入门段寄存器一共有8个:ES、CS、SS、DS、FS、GS、LDTR、TR。每个段寄存器结构如下:
1234Base 32bitLimit 32bitAttribute 16bitSelector 16bit (只有这16位是可见的)
读写方法:用mov时,mov ax,es只能读16位可见部分,mov ds,ax能写96位。读写LDTR用sldt或lldt,读写tr用str或ltr。
成员如下,其中GS在Windows中不用:
段寄存器
Selector
Attribute
Base
Limit
ES
0023
RW
0
0xFFFFFFFF
CS
001B
RX
0
0xFFFFFFFF
SS
0023
RW
0
0xFFFFFFFF
DS
0023
RW
0
0xFFFFFFFF
FS
003B
RW
0x7FFDE000
0xFFF
在调试时,单步调试触发单步调试异常进入内核,内核会把GS清零。段寄存器在内联汇编实现时编译器可能会瞎改。
段描述符分为全局描述符表GDT和局部描述符表LDT,但后者Windows不用。CPU有个寄存器GDT ...
Python-逆向实用工具
Python-逆向实用工具PEfile解析头部数据123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354import hashlib,pefile# 计算得到数据长度,自动使用推荐大小def NumberOfBytesHumanRepresentation(value): if value <= 1024: return '%s bytes' % value elif value < 1024 * 1024: return '%.1f KB' % (float(value) / 1024.0) elif value < 1024 * 1024 * 1024: return '%.1f MB' % (float(value) / 1024.0 / 1024.0) else: return & ...