imgui绘制菜单,

  imgui绘制菜单,

  永远的神干货盘点

  作者:小阿栗

  Imgui又称为亲爱的ImGui:它是与平台无关的C轻量级跨平台图形界面库,没有任何第三方依赖,可以将Imgui的源码直接加到项目中使用,也可以编译成dll,Imgui使用高级的(豪华的简写)或者计算机图形学进行界面渲染,Imgui主要用于游戏行业。

  这里我们需要用到两个工具弯路-高手(微软的钩库)和imgui-master,主要讲D3D9HOOK。

  我们先来创建一个动态链接库项目。步骤如下:

  1.选择新建项目

  2.选择Windows操作系统操作系统桌面-动态链接库(DLL)- D3D9HOOK,点击确定

  3.删除框架. h以及pch.cpp文件。添加一个dllmain.h头文件

  4.dllmain.cpp中要包含头文件添加#包括

  配置5.1 选择属性

  5.2 修改运行库以及幽灵缓解,选择应用

  5.3 配置包括路径,点击"宏",搜索DX,根据地址找到文件位置,将$(DXSDK_DIR)包括填入,应用

  5.4 搜索DX,将$(DXSDK_DIR)Lib填入,搜索$(platformTarget),将$(DXSDK _ DIR)lib \ $(平台目标)填入,应用

  (图片注释:配置好会自动匹配x86/x64不需要再改)

  5.5 新增d3d9.lib,d3dx9.lib这两个依赖项,应用

  配置好环境后,编译钩库(编译x86和x64两个版本)X86:找到Visual Studio2017,打开“对比2017年的x86原生工具提示",然后激光唱片到路径里编译器进行编译

  X64:找到Visual Studio2017,打开"适用于VS 2017的x64本机工具命令提示",然后激光唱片到路径里编译器进行编译

  7.打开项目文件夹

  8.新建一个目录绕路,将lib.x86、lib.x64和包括复制过来(将解放号.去掉方便后续识别)

  9.新建筛选器,命名便道

  10.在便道中添加现有项,选定两个头文件绕路h和德特弗

  11.配置解放运动库

  11.1选择属性

  11.2 编辑包含目录,宏-包含目录-$(项目目录)弯路\包括,应用

  11.3编辑附加库目录,宏-附加库目录-$(项目目录)弯路\ Lib \ $(平台目标),应用

  11.4 编辑附加依赖项,添加detours.lib,应用

  11.5 不使用预编译头

  12.配置imgui

  12.1在d3d 9挂钩目录下,新建imgui文件夹,将imgui-master中后端里imgui_impl_dx9.cpp、imgui_impl_dx9.h和imgui_impl_win32.cpp、imgui _ impl _ win32.h及主目录下所有。卡片打印处理机(卡片打印处理器的缩写)和h。都复制到imgui文件夹中

  12.2新建筛选器,命名imgui

  12.3在imgui中添加现有项,选定目录下所有文件

  12.4.dllmain.h中包含导进来的所有头文件

  13.主线程imgui窗口的实现

  typedef HRESULT(WINAPI func reset)(idirect 3d device 9 pi direct 3d device 9,d3d present _ PARAMETERS * PP presentation PARAMETERS);

  typedef HRESULT(WINAPI func end scene)(idirect 3d device 9 pidirect 3d device 9);

  typedef LRESULT(WINAPI * FuncWndProc)(const HWND,UINT,WPARAM,LPARAM);

  HWND g _ hWnd=NULL

  idirect 3d 9 * g _ idirect 3d 9

  D3DPRESENT _ PARAMETERS g _ d3dpp

  idirect 3d设备9 * g _ pidirect 3d设备9;

  FuncReset旧重置

  旧场景

  FuncWndProc OldWndProc

  DWORD * dwDeviceVirtualTable=NULL;

  extern LRESULT im GUI _ impl win 32 _ WndProcHandler(HWND HWND,UINT message,WPARAM wParam,LPARAM LPARAM);

  LRESULT WINAPI GrkWndProc(HWND HWND,UINT message,WPARAM wParam,LPARAM lParam)

  {

  if(im GUI _ impl win 32 _ WndProcHandler(hWnd,message,wParam,lParam))

  {

  返回真实}

  返回CallWindowProc(OldWndProc,hWnd,message,wParam,lParam);

  }

  VOID开始挂钩(PVOID * OldFunctionAddr,PVOID NewFunctionAddr)

  {

  DetourTransactionBegin();

  DetourUpdateThread(GetCurrentThread());

  绕道tach(OldFunctionAddr,NewFunctionAddr);

  DetourTransactionCommit();

  }

  VOID UnHook(p VOID * OldFunctionAddr,PVOID NewFunctionAddr)

  {

  DetourTransactionBegin();

  DetourUpdateThread(GetCurrentThread());

  DetourDetach(OldFunctionAddr,NewFunctionAddr);

  DetourTransactionCommit();

  }

  HRESULT WINAPI grk reset(idirect 3d device 9 pi direct 3d device 9,D3DPRESENT _ PARAMETERS d3dpp)

  {

  UnHook((PVOID*)( OldReset),grk reset);

  im GUI _ impl dx 9 _ invalidate device objects();

  HRESULT bRet=pidirect 3d设备9-Reset(d3dpp);

  im GUI _ imp ldx 9 _ CreateDeviceObjects();

  StartHook((PVOID*)( OldReset),grk reset);

  返回布雷特

  }

  hresult winapi grkenscene(I direct 3 DD vice 9 * pidgorict 3 DD vice 9)

  {

  unook(pvoid *)(oldends场景),grkendscene

  静态bool bflag=true

  中频(bFlag)

  {

  bflag=false imgui _ check version():img ui:create context();img uiio io=img ui:getio();我,我config flags=img config flags _ nomous change:我,我wantsaveinisettings=false我,我. ini filename=NULL:img ui:stylecolorsclasic();imfontconfig imfconfigimfConfig .font dataownedbyatlas=false imgui _ impl win 32 _ Init(g _ hWnd):img ui _ impl dx9 _ Init(pi direct 3d device 9);oldwndproc=(WNDPROC)setwindowlongptr(g _ hwnd,GWL_WNDPROC,(long _ ptr)grkwndproc);}

  hresult hret=pi direct 3d device 9-end scene();

  img ui _ impl dx9 _ new frame();

  img ui _ impl win32 _ new frame();

  img ui:new frame();

  img ui:setnextwindowpos(imec 2(0,0),imguicond _ firstuseever

  img ui:setnextwindowsize(imec 2(300,300));

  ImGui:Begin( GrkTools

  img ui:end();

  img ui:end frame();

  img ui:render();

  img ui _ impl dx9 _ render raw data(img ui:getdrawdata());

  startbook(pvoid *)(oldends场景),grkendscene

  返回hret

  }

  dword windowthread回调(lpvoid lpbuffer)

  {

  g _ hwnd=findwindowa(直接3 dwindwcclass,null);

  g _ idirect 3d 9=direct 3 DC create 9(d3d _ SDK _ version);

  memset( g_d3dpp、0、sizeof(g _ d3dpp));

  页:1。窗口=真

  页:1。swap effect=D3 dswapeeffect _ discard;

  页:1。后台缓冲格式=d3dfmt _ unknown

  页:1。enableautodepthstencil=true

  页:1。autodepthstencilformat=d3d fmt _ d16:

  hresult hret=g _ I direct 3d 9-创建设备(D3 dadapter _ default、D3DDEVTYPE_HAL、g_hWnd、D3 DC create _ software _ vertex ponding、g_d3dpp、g _ pidgirict 3d device 9);

  dwdevicevirtualtable=(dword)(dword *)g _ pi direct 3 DD vice 9;

  old reset=(func reset)dwdevicevirtualtable[16];

  oldendscene=(funcendsc)dwdevicevirtualtable[42];

  start book(pvoid *)(old reset,grk reset);

  startbook(pvoid *)(oldends场景),grkendscene

  返回0;

  }

  bool API entry dllman(hm module hm module,

  S7-1200可编程控制器,

  LPVOID已保留

  )

  {

  开关(来电原因)

  {

  DLL_PROCESS_ATTACH案例:

  CreateThread(NULL,NULL)(LP thread _ start _ routine)窗口线程回调,NULL,NULL,NULL;打断;打断;动态链接库_线程_附加案例:

  打断;打断;动态链接库_线程_分离案例:

  打断;打断;DLL_PROCESS_DETACH案例:

  打断;打断;

  }

  返回真实的

  }

  14.测试

  第14.1条打开文件夹,把动态链接库D3D9HOOK.dll粘贴到桌面上

  页:1打开挑起来,启动代码注入器,将动态链接库D3D9HOOK.dll进行注入

  测试成功:在挑一个左上角出现窗口

  这样,就手动创建了一个基础的imgui的框架

  来自51吨重博客作者极安御信安全研究院的原创作品,

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • office2010激活密钥大全 怎么永久激活office2010
  • project2010产品密钥免费_project2010激活密钥永久激活码
  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • chatgpt是什么?为什么这么火?
  • ChatGPT为什么注册不了?OpenAI ChatGPT的账号哪里可以注册?
  • OpenAI ChatGPT怎么注册账号?ChatGPT账号注册教程
  • chatgpt什么意思,什么是ChatGPT ?
  • CAD中怎么复制图形标注尺寸不变,CAD中怎么复制图形线性不变
  • cad中怎么创建并使用脚本文件,cad怎么运行脚本
  • cad中快速计算器的功能,cad怎么快速计算
  • cad中快速修改单位的方法有哪些,cad中快速修改单位的方法是
  • cad中心点画椭圆怎么做,cad轴测图怎么画椭圆
  • CAD中常用的快捷键,cad各种快捷键的用法
  • 留言与评论(共有 条评论)
       
    验证码: