fluffy_dev

Untitled

Jun 26th, 2017
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.74 KB | None | 0 0
  1. local function UInt32ToDouble(num) // credits to cake
  2. local negative = false
  3. if num >= 0x80000000 then
  4. negative = true
  5. num = num - 0x80000000
  6. end
  7.  
  8. local biasedExponent = bit.rshift(bit.band(num, 0x7FF00000), 20)
  9. local mantissa = (bit.band(num, 0x000FFFFF) * 4294967296 + num) / 2 ^ 52
  10. local f
  11. if biasedExponent == 0x0000 then
  12. f = mantissa == 0 and 0 or math.ldexp(mantissa, -1022)
  13. elseif biasedExponent == 0x07FF then
  14. f = mantissa == 0 and math.huge or (math.huge - math.huge)
  15. else
  16. f = math.ldexp(1 + mantissa, biasedExponent - 1023)
  17. end
  18.  
  19. return negative and -f or f
  20. end
  21.  
  22. local function __readMemory(address, len)
  23. local blankName, upFunction = debug.getupvalue(ipairs, 1) // backup ipairsaux
  24. debug.setupvalue(ipairs, 1, UInt32ToDouble(address - 8)) // set first upvalue to converted address
  25. local addrFunction = ipairs({}) // lua_pushvalue(L,lua_upvalueindex(1));
  26. debug.setupvalue(ipairs, 1, upFunction) // return upvalue to ipairsaux
  27. local fenvAddrNameFN = debug.getfenv(addrFunction)
  28. local memeAddress = tonumber(string.format("%p", fenvAddrNameFN), 16)
  29. memeAddress = bit.tohex(memeAddress, 8)
  30. local memeAddress2 = ""
  31. for i in memeAddress:gmatch("..") do
  32. memeAddress2 = string.char(tonumber(i, 16)) .. memeAddress2
  33. end
  34.  
  35. return memeAddress2:sub(1, len or 4)
  36. end
  37.  
  38. local function readMemory(address, len)
  39. local returnStr = ""
  40. for i = 1, len or 1, 4 do
  41. returnStr = returnStr .. __readMemory(address - 1, math.min(len - (i - 1), 4))
  42. end
  43.  
  44. return returnStr
  45. end
  46.  
  47. kmem = {}
  48. kmem.util = {}
  49. kmem.read = {}
  50. function kmem.util:address(obj)
  51. return tonumber(string.format("%p", obj))
  52. end
  53.  
  54. function kmem.util:hex(num)
  55. return "0x" .. string.format("%x", tostring(num)):upper()
  56. end
  57.  
  58. function kmem.read:uint8(addr)
  59. return readMemory(addr, 1):byte()
  60. end
  61.  
  62. function kmem.read:uint16(addr)
  63. local returnStr = ""
  64. returnStr = returnStr .. string.format("%02x", readMemory(addr + 1, 1):byte())
  65. returnStr = returnStr .. string.format("%02x", readMemory(addr, 1):byte())
  66. return tonumber(returnStr, 16)
  67. end
  68.  
  69. function kmem.read:uint24(addr)
  70. local returnStr = ""
  71. returnStr = returnStr .. string.format("%02x", readMemory(addr + 2, 1):byte())
  72. returnStr = returnStr .. string.format("%02x", readMemory(addr + 1, 1):byte())
  73. returnStr = returnStr .. string.format("%02x", readMemory(addr, 1):byte())
  74. return tonumber(returnStr, 16)
  75. end
  76.  
  77. function kmem.read:uint32(addr)
  78. local blankName, upFunction = debug.getupvalue(ipairs, 1)
  79. debug.setupvalue(ipairs, 1, UInt32ToDouble(addr - 8))
  80. local addrFunction = ipairs({})
  81. debug.setupvalue(ipairs, 1, upFunction)
  82. local fenvAddrNameFN = debug.getfenv(addrFunction)
  83. local memeAddress = tonumber(string.format("%p", fenvAddrNameFN), 16)
  84. return memeAddress
  85. end
Advertisement
Add Comment
Please, Sign In to add comment