UnrealSkill-VIP
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

[Source] D3D9 Stride Logger 2013

Ir em baixo

[Source] D3D9 Stride Logger 2013 Empty [Source] D3D9 Stride Logger 2013

Mensagem por uNreal 8/7/2020, 21:15

[Source] D3D9 Stride Logger 2013 WtvfSn2

Código:
#include <windows.h>
#include <fstream>
#include <stdio.h>
#include <vector>
#include <conio.h>
 
#include <d3d9.h>
#include <d3dx9.h>
 
#pragma comment( lib, "d3d9.lib" )
#pragma comment( lib, "d3dx9.lib" )
#pragma warning( disable : 4996 )
 
using namespace std;
//-------------------------------------------------------------------
 
typedef struct _STRIDELOG{
   INT Base; UINT Min;
   UINT Num; UINT Start;
   UINT Prim;
}STRIDELOG,*PSTRIDELOG;
 
HRESULT ( WINAPI* oReset )
   ( LPDIRECT3DDEVICE9, D3DPRESENT_PARAMETERS* );
 
HRESULT ( WINAPI* oEndScene )
   ( LPDIRECT3DDEVICE9 );
 
HRESULT ( WINAPI* oDrawIdP )
   ( LPDIRECT3DDEVICE9, D3DPRIMITIVETYPE,
      INT, UINT, UINT, UINT, UINT );
 
STRIDELOG StrideLog;
vector<STRIDELOG> STRIDE;
vector<DWORD> BASETEX;
D3DPRESENT_PARAMETERS PrP = {NULL};
LPDIRECT3DBASETEXTURE9 BTEX = NULL;
LPDIRECT3DDEVICE9 pDev = NULL;
LPDIRECT3DTEXTURE9 Green = NULL;
LPDIRECT3DTEXTURE9 pTx = NULL;
DWORD dCrDev = NULL;
LPDIRECT3D9 pDx = NULL;
LPD3DXFONT pFont = NULL;
D3DVIEWPORT9 Vpt;
D3DLOCKED_RECT d3dlr;
PDWORD VTab = NULL;
DWORD Old = NULL;
ofstream ofile;   
char dlldir[320];
char strbuff[260];
UINT iStride = 0;
UINT iBaseTex = 0;
bool Found = false;
bool Startlog = false;
 
void __cdecl add_log
   (const char *fmt, ...);
 
//-------------------------------------------------------------------
 
__declspec( naked )
VOID WINAPI CREATEDEVICE( VOID )
{
   __asm
   {
      PUSH EBP
      MOV EBP,ESP
      PUSH [EBP+0x20]
      PUSH [EBP+0x1C]
      PUSH [EBP+0x18]
      PUSH [EBP+0x14]
      PUSH [EBP+0x10]
      PUSH [EBP+0xC]
      PUSH [EBP+0x8]
      CALL [dCrDev]
      MOV EDX,[EBP+0x20]
      MOV EDX,[EDX]
      MOV [pDev],EDX
      POP EBP
      RETN 0x1C
   }
}
 
//-------------------------------------------------------------------
 
HRESULT WINAPI nDrawIdP
   ( LPDIRECT3DDEVICE9 pDev, D3DPRIMITIVETYPE Type,
      INT Base, UINT Min, UINT Num, UINT Start, UINT Prim )
{
   LPDIRECT3DVERTEXBUFFER9 Stream_Data;
   UINT Offset = 0;
   UINT Stride = 0;
 
   if(pDev->GetStreamSource
      ( 0, &Stream_Data, &Offset, &Stride )==S_OK)
         Stream_Data->Release();
 
   if(Stride == iStride)
   {
      pDev->GetTexture( 0, &BTEX );
      Found = false;
 
      for( UINT i = 0;i < BASETEX.size();i++ )
         if( BASETEX[i] == (DWORD)BTEX )
            Found = true;
 
      if( Found == false )
         BASETEX.push_back
            ( (DWORD)BTEX );
 
      if( BASETEX[iBaseTex] == (DWORD)BTEX && Green )
      {
         pDev->SetTexture( 0, Green );
         pDev->SetRenderState( D3DRS_ZENABLE, FALSE );
         oDrawIdP( pDev, Type, Base, Min, Num, Start, Prim );
         pDev->SetRenderState( D3DRS_ZENABLE, TRUE );
 
         if( Startlog == true )
         {
            Found = false;
            for( UINT i = 0;i < STRIDE.size();i++ )
               if( STRIDE[i].Base == Base &&
                   STRIDE[i].Min == Min &&
                      STRIDE[i].Num == Num &&
                         STRIDE[i].Start == Start &&
                            STRIDE[i].Prim == Prim )
                           {
                              Found = true;
                              break;
                           }
 
            if( Found == false )
            {
               StrideLog.Base = Base;
               StrideLog.Min = Min;
               StrideLog.Num = Num;
               StrideLog.Start = Start;
               StrideLog.Prim = Prim;
 
               add_log( "(NumVertices == %i && PrimitiveCount == %i && Stride == %i)",
                  Num, Prim, Stride );
 
               STRIDE.push_back
                  ( StrideLog );
            }
         }
      }
   }
 
   return oDrawIdP( pDev, Type,
      Base, Min, Num, Start, Prim );
}
 
//-------------------------------------------------------------------
 
HRESULT WINAPI nEndScene
   ( LPDIRECT3DDEVICE9 pDev )
{
   pDev->GetViewport( &Vpt );
 
   RECT FRect = { Vpt.Width-250,Vpt.Height-300,
                     Vpt.Width,Vpt.Height };
 
   if( Green == NULL )
      if( pDev->CreateTexture(8, 8, 1, 0, D3DFMT_A8R8G8B8,
         D3DPOOL_DEFAULT, &Green, NULL) == S_OK)
         if( pDev->CreateTexture(8, 8, 1, 0, D3DFMT_A8R8G8B8,
            D3DPOOL_SYSTEMMEM, &pTx, NULL) == S_OK)
            if( pTx->LockRect( 0, &d3dlr, 0, D3DLOCK_DONOTWAIT |
               D3DLOCK_NOSYSLOCK ) == S_OK )
            {
               for(UINT xy=0; xy < 8*8; xy++)
                  ((PDWORD)d3dlr.pBits)[xy] = 0xFF00FF00;
 
               pTx->UnlockRect( 0 );
               pDev->UpdateTexture( pTx, Green );
               pTx->Release();
            }
 
   if( pFont == NULL )
      D3DXCreateFontA( pDev, 16, 0, 700, 0, 0, 1, 0,
         0, DEFAULT_PITCH | FF_DONTCARE, "Calibri", &pFont );
 
   sprintf( strbuff, "Num of Textures: %i\nStride: %i\nBase Tex Num: %i\n\nSTRIDE LOGGER V1\n\n" \
      "Log Enable: %i\n\nNUM1: Stride++\nNUM2: Stride--\nNUM3: BaseTexNum++" \
         "\nNUM4: BaseTexNum--\nNUM0: Log On/Off", \
            BASETEX.size(), iStride, iBaseTex + 1, Startlog );
 
   if( pFont )
      pFont->DrawTextA( 0, strbuff, -1, &FRect,
         DT_CENTER|DT_NOCLIP, 0xFF00FF00);
 
   if( GetAsyncKeyState( VK_NUMPAD1 ) &1 )
   {iStride++;BASETEX.clear();iBaseTex = 0;}
 
   if( GetAsyncKeyState( VK_NUMPAD2 ) &1 )
   if( iStride > 0 )
   {iStride--;BASETEX.clear();iBaseTex = 0;};
 
   if( GetAsyncKeyState( VK_NUMPAD3 ) &1 )
   if(iBaseTex < BASETEX.size() - 1)iBaseTex++;
 
   if( GetAsyncKeyState( VK_NUMPAD4 ) &1 )
   if( iBaseTex > 0 )
      iBaseTex--;
 
   if( GetAsyncKeyState( VK_NUMPAD0 ) &1 )
   {Startlog = !Startlog;STRIDE.clear();}
 
   return oEndScene( pDev );
}
 
//-------------------------------------------------------------------
 
HRESULT WINAPI nReset
   ( LPDIRECT3DDEVICE9 pDev,
      D3DPRESENT_PARAMETERS* PresP )
{
   if( pFont ) {pFont->Release();pFont = NULL;}
   if( Green ) {Green->Release();Green = NULL;}
 
   return oReset( pDev, PresP );
}
 
//-------------------------------------------------------------------
 
VOID WINAPI THREAD( )
{
   while( pDev == NULL )
      Sleep( 100 );
 
   VTab[16] = dCrDev;
   VirtualProtect( (PVOID)&VTab[16], 4, Old, &Old );
 
   VTab  = (PDWORD)*(PDWORD)pDev;
 
   *(PDWORD)&oEndScene      = VTab[42];
   *(PDWORD)&oReset         = VTab[16];
   *(PDWORD)&oDrawIdP      = VTab[82];
 
   while( 1 )
   {
      VTab[42] = (DWORD)nEndScene;
      VTab[16] = (DWORD)nReset;
      VTab[82] = (DWORD)nDrawIdP;
      Sleep( 100 );
   }
}
 
//-------------------------------------------------------------------
 
void __cdecl add_log (const char *fmt, ...)
{
   if(&ofile != NULL)
   {
      if(!fmt) { return; }
 
      va_list va_alist;
      char logbuf[256] = {0};
 
      va_start (va_alist, fmt);
      _vsnprintf (logbuf+strlen(logbuf),
         sizeof(logbuf) - strlen(logbuf), fmt, va_alist);
      va_end (va_alist);
 
      ofile << logbuf << endl;
   }
}
 
//-------------------------------------------------------------------
 
BOOL WINAPI DllMain( HMODULE hModule,
   DWORD dwReason, LPVOID lpReserved )
{
   if( dwReason == DLL_PROCESS_ATTACH )
   {
      DisableThreadLibraryCalls( hModule );
      GetModuleFileNameA( hModule, dlldir, 320 );
      dlldir[strlen(dlldir)-3] = 0;
      strcat(dlldir,"txt");
 
      ofile.open(dlldir, ios::app);
      add_log("\nxDD Log");
 
      pDx = Direct3DCreate9
         ( D3D_SDK_VERSION );
 
      if( pDx != NULL )
      {
         VTab  = (PDWORD)*(PDWORD)pDx;
         pDx->Release();
 
         dCrDev = (DWORD)VTab[16];
         VirtualProtect( (PVOID)&VTab[16], 4, 0x40, &Old );
 
         VTab[16] = (DWORD)CREATEDEVICE;
         CreateThread( NULL, NULL, (LPTHREAD_START_ROUTINE)
            THREAD, NULL, NULL, NULL );
      }
   }
 
   return TRUE;
}

Credits:
Zooom
UC Forum assorted
GD
aB
uNreal
uNreal
ADM
ADM


Voltar ao Topo Ir em baixo

Voltar ao Topo


 
Permissão neste fórum:
Você não pode responder aos tópicos neste fórum