Advertisement
fastman92

ReadInt - reading signed/unsigned number

May 22nd, 2013
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.86 KB | None | 0 0
  1.     static int ReadInt(lua_State *L)
  2.     // memoryAddress, size, is_signed, virtual_protect
  3.     {
  4.         enum ARGUMENT_ORDER
  5.         {
  6.             ARGUMENT_POINTER = 1,
  7.             ARGUMENT_SIZE,
  8.             ARGUMENT_SIGN,
  9.             ARGUMENT_VIRTUAL_PROTECT,
  10.         };
  11.  
  12.         Script S(L, 0);
  13.        
  14.         void* address = (void*)S.GetInt(ARGUMENT_POINTER, false);
  15.        
  16.         if(address)
  17.         {
  18.             size_t size = S.GetInt(ARGUMENT_SIZE, 0);
  19.  
  20.             if (S.GetBool(ARGUMENT_VIRTUAL_PROTECT, false))
  21.                 UnprotectMemory(address, size);
  22.  
  23.             signed long int value;
  24.  
  25.             switch (size)
  26.             {
  27.                 default:
  28.                     value = *(BYTE*)address;
  29.                     break;
  30.                 case sizeof(WORD):
  31.                     value = *(WORD*)address;
  32.                     break;
  33.                 case sizeof(DWORD):
  34.                     value = *(DWORD*)address;
  35.             }
  36.            
  37.             if(S.GetBool(ARGUMENT_SIGN, false))
  38.             {
  39.                 if(1 << ((size*8)-1) & value)
  40.                     value -= 1 << (size*8);
  41.             }
  42.  
  43.             S.PushInt(value);
  44.         }
  45.  
  46.         return 1;      
  47.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement