ฟอรั่ม PSsix

Would you like to react to this message? Create an account in a few clicks or log in to continue.

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


2 posters

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

    wdiLi
    wdiLi
    PSsix Member High Class
    PSsix Member High Class


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

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

    ตั้งหัวข้อ by wdiLi 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 แล้ว มีปัญหา เฉยเลย ช่วยหน่อยนะ ครับ ^_^

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

    #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
    POS
    POS
    PSsix
    PSsix


    มีปัญหา เรื่อง อ่านและเขียนค่าแบบมัลติพ้อยเตอร์ (Multilevel Pointer)  Empty มีปัญหา เรื่อง อ่านและเขียนค่าแบบมัลติพ้อยเตอร์ (Multilevel Pointer)  Empty มีปัญหา เรื่อง อ่านและเขียนค่าแบบมัลติพ้อยเตอร์ (Multilevel Pointer)  Empty
    จำนวนข้อความ : 1152
    ความนิยม : 326
    เข้าร่วมเมื่อ : 19/07/2010

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

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

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

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

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


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

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

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

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

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


    มีปัญหา เรื่อง อ่านและเขียนค่าแบบมัลติพ้อยเตอร์ (Multilevel Pointer)  Empty มีปัญหา เรื่อง อ่านและเขียนค่าแบบมัลติพ้อยเตอร์ (Multilevel Pointer)  Empty มีปัญหา เรื่อง อ่านและเขียนค่าแบบมัลติพ้อยเตอร์ (Multilevel Pointer)  Empty
    จำนวนข้อความ : 1152
    ความนิยม : 326
    เข้าร่วมเมื่อ : 19/07/2010

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

    ตั้งหัวข้อ by POS 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.]
    wdiLi
    wdiLi
    PSsix Member High Class
    PSsix Member High Class


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

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

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

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

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

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

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


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

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

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

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

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

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

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


    มีปัญหา เรื่อง อ่านและเขียนค่าแบบมัลติพ้อยเตอร์ (Multilevel Pointer)  Empty มีปัญหา เรื่อง อ่านและเขียนค่าแบบมัลติพ้อยเตอร์ (Multilevel Pointer)  Empty มีปัญหา เรื่อง อ่านและเขียนค่าแบบมัลติพ้อยเตอร์ (Multilevel Pointer)  Empty
    จำนวนข้อความ : 1152
    ความนิยม : 326
    เข้าร่วมเมื่อ : 19/07/2010

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

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

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

    wdiLi
    wdiLi
    PSsix Member High Class
    PSsix Member High Class


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

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

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

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

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

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


      เวลาขณะนี้ 29/03/24, 05:57 am