我正在为我工作的商店进行库存自动化。 我需要阅读一个地址,并知道一周中售出的商品数量。
我能够找到BaseAddress和Offset: 0x0ac22c78 0x380
我正在使用自动代码进行读取。
但是它只读取生成的地址,而不使用BaseAddress读取。
如何找到生成的地址? 代码是:
可以在C#或C ++中 我只想找到生成的地址。
Local $iPid = WinGetProcess("Store")
Local $iAddress = 0x0AFDE298
If $iPid = -1 Then
ConsoleWrite("+++ Failed to get process PID. Open good process or change parameter in WinGetProcess func." & @CRLF)
Exit
EndIf
Local $hHandle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1F0FFF, 'int', 1, 'int', $iPid)
If @error Then
ConsoleWrite("+++ Failed to open process memory for FULL_ACCESS. Error is " & @error & @CRLF)
Exit
EndIf
Local $tagStruct = "struct;double var1;endstruct"
Local $sStruct = DllStructCreate($tagStruct)
If @error Then
ConsoleWrite("+++ Failed to create $sStruct. Error is " & @error & @CRLF)
Exit
EndIf
DllCall("kernel32.dll", 'int', 'ReadProcessMemory', 'int', $hHandle[0], 'int', $iAddress, 'ptr', DllStructGetPtr($sStruct), 'int', DllStructGetSize($sStruct), 'int', '')
If @error Then
ConsoleWrite("+++ Failed to Read Process Memory. Error is " & @error & @CRLF)
Exit
EndIf
Local $vRet = DllStructGetData($sStruct, "var1")
If @error Then
ConsoleWrite("+++ Failed to Get data from $sStruct. Error is " & @error & @CRLF)
Exit
EndIf
ConsoleWrite("++ Successfully read memory at addr 0x" & Hex($iAddress) & " value is " & $vRet & @CRLF)
答案 0 :(得分:0)
您的问题是您找不到地址,而是找到了指向该地址的指针。
如何解决它真的很简单...
选项1:
选项2:
选项3:不推荐
如何使用Autoit读取内存:
https://www.autoitscript.com/forum/topic/55095-how-can-read-value-from-memory-address/
如何从指针读取值
读取指针值->指向值作为新地址->结果