2
require "alien"

--the address im trying to edit in the Mahjong game on Win7
local SCOREREF = 0x0744D554 
--this should give me full access to the process
local ACCESS = 0x001F0FFF
--this is my process ID for my open window of Mahjong
local PID = 1136

--function to open proc
local op = alien.Kernel32.OpenProcess
op:types{ ret = "pointer", abi = "stdcall"; "int", "int", "int"}

--function to write to proc mem
local wm = alien.Kernel32.WriteProcessMemory
wm:types{ ret = "long", abi = "stdcall"; "pointer", "pointer", "pointer", "long", "pointer" }


local pRef = op(ACCESS, true, PID)
local buf = alien.buffer("99")

--         ptr,uint32,byte arr (no idea what to make this),int, ptr
print( wm( pRef, SCOREREF, buf, 4, nil))
--prints 1 if success, 0 if failed

これが私のコードです。タイプが正しく設定されているかどうかさえわかりません。

私は完全に道に迷っており、いくつかの指導が必要です。エイリアンのためのオンラインヘルプ/ドキュメントがもっとあったらいいのにと思います。それは私の貧しい脳を混乱させます。

私を完全に困惑させているのは、 WriteProcessMemoryが正常に完了することもあれば(私の知る限りでは何もしませんが)、正常に完了しないこともあるということです。私が言ったように、私の脳は痛いです。

助けていただければ幸いです。

4

2 に答える 2

0

バッファーには 2 バイト ("99") しか含まれていないように見えますが、WriteProcessMemory の呼び出しで 4 バイトを指定しています。

32 ビット値99を (ASCII 文字列ではなく数値として) メモリに書き込むことが意図されている場合は、次を使用できます。

alien.buffer("\99\0\0\0")

を使用して、任意の整数を文字列表現に変換できますalien.struct.pack

require "alien.struct"
s = alien.struct.pack('i', 99)
buf = alien.buffer(s)
于 2010-04-03T17:17:34.870 に答える