ฟอรั่มของบล็อก http://pssix.blogspot.com


มีปัญหา เรื่อง อ่านและเขียนค่าแบบมัลติพ้อยเตอร์ (Multilevel Pointer)

Share
avatar
wdiLi
PSsix Member High Class
PSsix Member High Class

PSsix Game Coder
จำนวนข้อความ : 73
ความนิยม : 7
เข้าร่วมเมื่อ : 29/01/2011
อายุ : 27

มีปัญหา เรื่อง อ่านและเขียนค่าแบบมัลติพ้อยเตอร์ (Multilevel Pointer)

ตั้งหัวข้อ by wdiLi on 06/10/12, 01:06 am

มีปัญหาเกี่ยวกับการ อ่านค่า เขียนค่าแบบ (Multilevel Pointer) ครับ

พอดีได้ ลองทดสอบ หาค่า pointer แบบ Multilevel ของเกม PlantsVsZombie มา

พอ ผมหาได้แล้ว ก็เอามาเขียน สคริป ตามบทความ เขียนบอทเกมด้วย AutoIt : Bot 6 การอ่านเขียน Memory ในเกม

ในแบบที่ 3 และปัญหาก็คือ สคริป มันอ่านค่า Pointer ออก มาเป้น 0 ชะงั้น

ปล* ได้ โหลด NomadMemoryPSsix.au3 สำหรับ เวอร์ชัน 3.3.8.1 ไปแล้ว ทดสอบกับ Pointer ชั้นเดียวได้ไม่มีปัญหา
แต่ พอ ลอง แบบ Multi pointer แล้ว มีปัญหา เฉยเลย ช่วยหน่อยนะ ครับ ^_^

ตามรูปที่ เอามาประกอบ คำอธิบาย
[You must be registered and logged in to see this link.]

#RequireAdmin
#include <NomadMemoryPSsix.au3>

Global $StaticOffset = "0x2A9EC0" ; ค่าออฟเซ็ตคงที่ ; popcapgame1.exe+2A9EC0

Global $Offset[3]
$Offset[0] = 0 ; ใส่ 0 เป็นค่าเริ่มต้นทุกครั้ง ห้ามเปลี่ยน
$Offset[1] = 0x768 ; ค่าออฟเซ็ตในตำแหน่งล่าง สุด
$Offset[2] = 0x5560 ; ค่าออฟเซ็ตในตำแหน่งบน สุด

$memopen = _MEMORYOPEN(ProcessExists("popcapgame1.exe")) ; เปลี่ยนชื่อไฟล์เกม
If $memopen = 0 Then
ConsoleWrite('ผิดพลาดไม่มีโปรแกรม =' & $memopen & @CRLF)
Exit
EndIf

$BaseAddr = _MemoryGetBaseAddress($memopen, 1) ; หา BaseAddresse
$FinalAddr = $BaseAddr + $StaticOffset

; 3 อ่านค่า address แบบ Multilevel Pointer
$value = _MemoryPointerRead($FinalAddr, $memopen, $Offset) ; อ่านค่าจากพ้อยเตอร์จะเก็บไว้ในตัวแปร $value[1]
ConsoleWrite('ค่าที่อ่านได้จากแอดเดรส ' & $value[0] & ' = ' & $value[1] & @CRLF)

_MEMORYCLOSE($memopen) ;ปิดการอ่านหน่วยความจำ นำไปวางไว้ท้ายสุดเมื่อไม่ต้องการอ่านหรือเขียนแล้ว เช่น ตอนปิดโปรแกรม

em228
avatar
POS
PSsix
PSsix


จำนวนข้อความ : 1152
ความนิยม : 323
เข้าร่วมเมื่อ : 19/07/2010

Re: มีปัญหา เรื่อง อ่านและเขียนค่าแบบมัลติพ้อยเตอร์ (Multilevel Pointer)

ตั้งหัวข้อ by POS on 06/10/12, 01:13 am

ลองปิดเกมส์ ปิดโปรแกรม CE แล้วเปิดขึ้นมาใหม่ ดูว่าค่าที่หาได้ถูกต้องหรือไม่ เพราะค่าแบบมัลติพ้อยเตอร์สามารถหาได้หลายค่า แต่ถ้าหาได้ถูกต้องก็จะชี้ไปยังค่าที่ต้องการได้หมด

หรือ
นำเอาตัวเกมส์ไปฝากลิงก์ไว้ที่ไหนก็ได้ นำเอามาโฟสไว้ที่นี่ ผมจะทำตัวอย่างให้ดูครับ (ตัวเกมส์นี้ผมลบทิ้งไปนานแล้ว)

หมายเหตุ
ถ้าค่าในเกมส์ที่หานั้นไม่ใช่ค่าแบบมัลติพ้อยเตอร์จริงๆ แต่คุณใช้วิธีหาแบบมัลติพ้อยเตอร์ก็จะได้ค่าปลอมๆ ออกมา ในตัวอย่างแบบมัลติพ้อยเตอร์ผมใช้เกมส์ StarDefender3 เป็นตัวทดสอบ ไม่แน่ใจว่าเกมส์ซอมบี้จะเป็นมัลติหรือไม่ เพราะทดสอบนานแล้ว


||----------------------------------------------------------------------------------------------------------------||

กลุ่ม AutoIt ในเฟสบุ๊ค
[You must be registered and logged in to see this link.]

++++++++++++++++++++++++++++++++++++++++++++
[You must be registered and logged in to see this link.]
[You must be registered and logged in to see this link.]
avatar
wdiLi
PSsix Member High Class
PSsix Member High Class

PSsix Game Coder
จำนวนข้อความ : 73
ความนิยม : 7
เข้าร่วมเมื่อ : 29/01/2011
อายุ : 27

Re: มีปัญหา เรื่อง อ่านและเขียนค่าแบบมัลติพ้อยเตอร์ (Multilevel Pointer)

ตั้งหัวข้อ by wdiLi on 06/10/12, 01:27 am

ไม่รู้หาถูก หรือ หาผิด ยังไง ก็ ทำตัวอย่างให้ดู หน่อยแล้วกัน ครับผม em219

นี้นะครับตัวไฟล์เกม -> [You must be registered and logged in to see this link.]
avatar
POS
PSsix
PSsix


จำนวนข้อความ : 1152
ความนิยม : 323
เข้าร่วมเมื่อ : 19/07/2010

Re: มีปัญหา เรื่อง อ่านและเขียนค่าแบบมัลติพ้อยเตอร์ (Multilevel Pointer)

ตั้งหัวข้อ by POS on 06/10/12, 09:31 am

ผมตรวจดู พบว่าคำสั่ง _MemoryGetBaseAddress มีปัญหาครับ ซึ่งปัญหาถัดมาก็คือเมื่อแก้ไขคำสั่งนี้เสร็จแล้ว ต้องไปเริ่มใหม่กับคำสั่งหาค่าพ้อยเตอร์อีก (ไล่ดีบักกันไปทีละคำสั่ง) แน่นอนว่าแก้ไขได้ แต่เสียเวลา ถ้ารีบทดลองก็ใช้เวอร์ชัน 3.3.6.1 ไปก่อนครับ (ใช้กับไฟล์เก่า)


ด้านล่างนี้เป็นค่ามัลติพ้อยเตอร์ของ Plants vs. Zombies ผมใส่ตัวอย่างไว้หลายแบบลองเอาไปใช้ดูครับ
[You must be registered and logged in to see this link.]


||----------------------------------------------------------------------------------------------------------------||

กลุ่ม AutoIt ในเฟสบุ๊ค
[You must be registered and logged in to see this link.]

++++++++++++++++++++++++++++++++++++++++++++
[You must be registered and logged in to see this link.]
[You must be registered and logged in to see this link.]
avatar
wdiLi
PSsix Member High Class
PSsix Member High Class

PSsix Game Coder
จำนวนข้อความ : 73
ความนิยม : 7
เข้าร่วมเมื่อ : 29/01/2011
อายุ : 27

Re: มีปัญหา เรื่อง อ่านและเขียนค่าแบบมัลติพ้อยเตอร์ (Multilevel Pointer)

ตั้งหัวข้อ by wdiLi on 06/10/12, 12:01 pm

งั้นก็คง ต้องลองกับ เวอร์ชันเก่าไปก่อน รอการแก้ไขในเวอร์ชันใหม่ ต่อไป อีกที่

อืม แล้ว พวก Mutilevel pointer มีค่า offset สูงสุดกี่ Offset ครับ มี 5 Offset หรือ เปล่า ครับ

พอดี เพิ่งศึกษา เลยไม่ค่อยรู้ เกี่ยวกับการหา Multi Offset มากนัก

ยังไง ก็ ขอบคุณ คุณ POS มากนะครับ ที่มาตอบข้อข้องใจ em219
avatar
wdiLi
PSsix Member High Class
PSsix Member High Class

PSsix Game Coder
จำนวนข้อความ : 73
ความนิยม : 7
เข้าร่วมเมื่อ : 29/01/2011
อายุ : 27

Re: มีปัญหา เรื่อง อ่านและเขียนค่าแบบมัลติพ้อยเตอร์ (Multilevel Pointer)

ตั้งหัวข้อ by wdiLi on 06/10/12, 04:03 pm

หลังจากที่ได้ ไปถอน 3.3.8.1 ออก ไปใช้ Autoit 3.3.6.1 และไฟล์ NomadMemoryPSsix.au3 ตัวเก่า
ตามที่ คุณ POS ได้บอกไว้

สคริปต์ สามารถ อ่านค่า เขียนค่า Memory ได้ ตามที่ต้องการ ใช้ Multipointer ที่หามาได้
จาก สคริปต์ อั้นข้างบน ที่มีปัญหา ของ _MemoryGetBaseAddress กับ เวอร์ชันใหม่

[You must be registered and logged in to see this link.]

จะรอเวอร์ชันใหม่ ต่อไป นะครับ em219
avatar
POS
PSsix
PSsix


จำนวนข้อความ : 1152
ความนิยม : 323
เข้าร่วมเมื่อ : 19/07/2010

Re: มีปัญหา เรื่อง อ่านและเขียนค่าแบบมัลติพ้อยเตอร์ (Multilevel Pointer)

ตั้งหัวข้อ by POS on 09/10/12, 06:15 am

ในทางทฤษฎีมีได้เท่าไหร่ก็ได้ แต่ในทางปฏิบัติจริงจะจำกัดด้วยความจุของหน่วยความจำที่ีมีอยู่ในเครื่อง รวมถึงความสามารถตัวภาษาคอมพิวเตอร์ที่ใช้ในการอ่านค่า (มากเกินไปอาจจะทำให้แฮ้งค์) เพราะยิ่งจำนวนพ้อยเตอร์ในมัลติพ้อยเตอร์มาก ก็ยิ่งต้องใช้หน่วยความจำในการเก็บตำแหน่งมากตาม



||----------------------------------------------------------------------------------------------------------------||

กลุ่ม AutoIt ในเฟสบุ๊ค
[You must be registered and logged in to see this link.]

++++++++++++++++++++++++++++++++++++++++++++
[You must be registered and logged in to see this link.]
[You must be registered and logged in to see this link.]
avatar
wdiLi
PSsix Member High Class
PSsix Member High Class

PSsix Game Coder
จำนวนข้อความ : 73
ความนิยม : 7
เข้าร่วมเมื่อ : 29/01/2011
อายุ : 27

Re: มีปัญหา เรื่อง อ่านและเขียนค่าแบบมัลติพ้อยเตอร์ (Multilevel Pointer)

ตั้งหัวข้อ by wdiLi on 09/10/12, 02:13 pm

อืม มันก็มีข้อจำกัด ของมัน เอง ทั้ง หน่วยความจำ และ ภาษาคอมพิวเตอร์ที่ใช้ในการอ่านค่า ก็ดี

ยิ่งใช้มาก ยิ่ง เปลืองทรัพยากร เครื่อง เนอะ

ขอบคุณ ครับที่ให้ความรู้ เกี่ยวกับหลักการ ทำงาน


    เวลาขณะนี้ 22/10/17, 07:58 am