[Help Request] TLS / Object Structure menu

User Tag List

Page 1 of 2 12 LastLast
Results 1 to 15 of 19
  1. #1
    Zephir's Avatar Member
    Reputation
    8
    Join Date
    May 2007
    Posts
    44
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    [Help Request] TLS / Object Structure

    Hey guys.

    Read through pretty much everything on this forum that has to do with TLS. I ran IDE and found:

    Code:
    .text:0046C16C                 mov     ecx, large fs:2Ch
    .text:0046C173                 mov     eax, TlsIndex
    .text:0046C178                 mov     eax, [ecx+eax*4]
    .text:0046C17B                 mov     ecx, [eax+8]
    with TslIndex being:
    Code:
    .data:012F0CC8 TlsIndex        dd ?                    ; DATA XREF: sub_46C160+13r
    so now i use Whalemarte's AutoIt Code. Edited the TlsIndex... wont work. I'm assume that the Object Structure changed? How do you guys dump the structure? any hint is appreciated.

    Thanks,
    Zephir

    [Help Request] TLS / Object Structure
  2. #2
    SKU's Avatar Contributor
    Reputation
    306
    Join Date
    May 2007
    Posts
    565
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Uhm dude.. you might wanna post what exactly is not working (code).
    Also, that other thread's like a year old.

  3. #3
    Cypher's Avatar Kynox's Sister's Pimp
    Reputation
    1356
    Join Date
    Apr 2006
    Posts
    5,368
    Thanks G/R
    0/4
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by Gucci View Post
    Well im not exactly sure what you want from the TLS, but if you just are wanting to scan it for objects and object Info, just search for Object manager, theres plenty of C++/C# source code for it, that can be easily converted to Au3, (took me about 5 mins) and it works great in Au3 also.

    if you post a code snippet of what your trying to do or more info, we could help you more mate. good luck

    The object manager is thread-local and hence WoW accesses it primarily through TLS.

  4. #4
    Zephir's Avatar Member
    Reputation
    8
    Join Date
    May 2007
    Posts
    44
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    okay, i worked on my problem and managed to bring it down to one point:

    1. TLS_Index = [0x013569BC] (for 3.1.0)
    2. TLS_Offset = [TIB + 0x2C]
    3. WoW Base = TLS_Offset + [TLS_Index * 4]

    now i read [WoW Base + 8] for PlayerGUID! But how do i find the player base from here? I still dont understand wow's sturcture in memory .


    thank you

    Edit:
    this question only applies, if step 1 through 3 is correct
    Last edited by Zephir; 04-19-2009 at 12:24 PM.

  5. #5
    Cypher's Avatar Kynox's Sister's Pimp
    Reputation
    1356
    Join Date
    Apr 2006
    Posts
    5,368
    Thanks G/R
    0/4
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Loop through the linked list, for each object do a GUID compare. If the GUID matches then you have your local player pointer.

    Pointer to the object manager is at 'WoWBase + 0x10'. Pointer to linked list is at (from memory) 0xAC.

    Just look at how GetObjectByGUID is implemented. You can pretty much rip the code from there.

  6. #6
    Xzibit's Avatar Banned
    Reputation
    22
    Join Date
    Apr 2009
    Posts
    22
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    good explanation thanks cypher

  7. #7
    Zephir's Avatar Member
    Reputation
    8
    Join Date
    May 2007
    Posts
    44
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by Cypher View Post
    Loop through the linked list, for each object do a GUID compare. If the GUID matches then you have your local player pointer.

    Pointer to the object manager is at 'WoWBase + 0x10'. Pointer to linked list is at (from memory) 0xAC.

    Just look at how GetObjectByGUID is implemented. You can pretty much rip the code from there.
    thank you cypher. everything works fine now. the problem was that i had object manager and playerGUID confused (0x8 and 0x10) so thats why garbage came out. now i got it.

    now one more question. do the object structs ever change? e.g.

    WoWObject{
    dword var1;
    dword var2;
    dword DataPtr;
    dword var4;
    dword var5;
    dword ObjectType;
    dword var7;
    dword var8;
    dword var9;
    dword var10;
    dword var11;
    dword var12;
    uint64 GUID;
    dword var13;
    ptr NextObject;
    }

    Edit:
    and +rep of course

    Edit2:
    Nevermind, found out they do.
    Last edited by Zephir; 04-20-2009 at 05:11 AM.

  8. #8
    g3gg0's Avatar Active Member
    Reputation
    32
    Join Date
    Mar 2008
    Posts
    86
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by Cypher View Post
    Loop through the linked list, for each object do a GUID compare. If the GUID matches then you have your local player pointer.
    why that slow method?

    simply use that address - it contains the local player pointer
    Code:
    int playerObject = 0x01357CE4; // 3.0.9: 0x012EB404; // 3.0.8: 0x12EA404;//3.0.3: 0x012EA2F4; // 3.0.0: 0x012E813C; // 2.4.3: 0x00E29D28; // 2.4.2: 0x00E8AA38; // 2.4.1:  0x00E849E0;

  9. #9
    Cypher's Avatar Kynox's Sister's Pimp
    Reputation
    1356
    Join Date
    Apr 2006
    Posts
    5,368
    Thanks G/R
    0/4
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by g3gg0 View Post
    why that slow method?

    simply use that address - it contains the local player pointer
    Code:
    int playerObject = 0x01357CE4; // 3.0.9: 0x012EB404; // 3.0.8: 0x12EA404;//3.0.3: 0x012EA2F4; // 3.0.0: 0x012E813C; // 2.4.3: 0x00E29D28; // 2.4.2: 0x00E8AA38; // 2.4.1:  0x00E849E0;

    Gee, maybe because you then have access to ALL objects, not just the local one.

    Durrrrrrrrrrrrrrrrrrrrrrr.

    Also, it's far from slow. WoW does exactly what I described in all its LUA routines that need to get an object by its GUID. I'm sure they'd cache the pointer if it was a huge performance hit (Benchmark it, its a very fast and easy thing to do. Just basic pointer arithmetic and integer compares). Every frame I make a copy of WoWs object list using that method, then all my code uses that internal list (including a separately cached player pointer), the performance hit from doing something like that on every frame is practically zero.
    Last edited by Cypher; 04-20-2009 at 12:41 PM.

  10. #10
    schlumpf's Avatar Retired Noggit Developer

    Reputation
    755
    Join Date
    Nov 2006
    Posts
    2,759
    Thanks G/R
    0/3
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    But I'm running on a SLOOOOOOOOW machine!

    I don't really get why you copy it all .. That's the only thing which seems a bit weird for me.

    (Btw: update your blog with something)

  11. #11
    Cypher's Avatar Kynox's Sister's Pimp
    Reputation
    1356
    Join Date
    Apr 2006
    Posts
    5,368
    Thanks G/R
    0/4
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by schlumpf View Post
    But I'm running on a SLOOOOOOOOW machine!

    I don't really get why you copy it all .. That's the only thing which seems a bit weird for me.

    (Btw: update your blog with something)

    I will soon. So lazy though.

    You copy it all because it's faster.

    Lets say I need to do 9 passes of the list on a certain frame. If I keep internal lists (small correction, I actually keep more than one), I will get better performance than if I just called into WoW multiple times.

    eg. Unit list, gameobject list, etc

    Also, internal lists are easier to use. I can throw all the data into a STL container and the objects suddenly become 100x easier to search and manage.

  12. #12
    Zephir's Avatar Member
    Reputation
    8
    Join Date
    May 2007
    Posts
    44
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by g3gg0 View Post
    why that slow method?
    just stopped the time needed for the fun of it: 18.157328 milliseconds. And i am using AutoIt! which means if ur using C# it would be even faster

  13. #13
    Cypher's Avatar Kynox's Sister's Pimp
    Reputation
    1356
    Join Date
    Apr 2006
    Posts
    5,368
    Thanks G/R
    0/4
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by Zephir View Post
    just stopped the time needed for the fun of it: 18.157328 milliseconds. And i am using AutoIt! which means if ur using C# it would be even faster

    And faster again in C++.

  14. #14
    g3gg0's Avatar Active Member
    Reputation
    32
    Join Date
    Mar 2008
    Posts
    86
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    yeah if you want now your supercool HP bars updated with 60 FPS, you get into trouble when you dont cache

    edit:
    Originally Posted by Cypher View Post

    Also, it's far from slow. WoW does exactly what I described in all its LUA routines that need to get an object by its GUID.
    yes, its far from slow. is even damn ****ing slow

    no, serious...
    dereferencing one pointer vs. dereferencing up to some hundreds.
    (imagine you are in dalaran)
    that sums up. and if you are caching the object, you have to refresh
    it on zone change/relog etc. if you dont - you will face problems and so on...

    for the sake of object oriented, cool, feature-rich program languages many
    people switch to C# or similar and forget even to use fast algorithms
    or "simple" solutions to get smth working.

    e.g. they scan all buffs to get "isMounted" status instead of reversing
    the functions and seeing that this would need just one pointer dereference.

    computers get faster every year...
    but programmers fail to optimize their code and the programs get slower more and more and need more memory.
    so we need even faster computers etc..
    Last edited by g3gg0; 04-20-2009 at 04:37 PM.

  15. #15
    Robske's Avatar Contributor
    Reputation
    305
    Join Date
    May 2007
    Posts
    1,062
    Thanks G/R
    3/4
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Wirth's law!
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live." - Martin Golding
    "I cried a little earlier when I had to poop" - Sku

Page 1 of 2 12 LastLast

Similar Threads

  1. [Help Request] Interact with Object (CTM)
    By Mr.Zunz in forum WoW Memory Editing
    Replies: 7
    Last Post: 09-03-2009, 08:06 PM
  2. [Help Request] Find Cloud Objects in memory
    By boomingranny in forum WoW Memory Editing
    Replies: 5
    Last Post: 06-14-2009, 10:10 PM
  3. [Help] Object structure enumeration
    By corderoy in forum WoW Memory Editing
    Replies: 4
    Last Post: 10-12-2008, 04:58 PM
  4. Getting A Friend Connected (Help Request)
    By Magnusvermis in forum World of Warcraft Emulator Servers
    Replies: 9
    Last Post: 12-07-2007, 11:57 PM
  5. Help Request
    By sirios in forum World of Warcraft Emulator Servers
    Replies: 4
    Last Post: 10-14-2007, 12:47 PM
All times are GMT -5. The time now is 04:16 PM. Powered by vBulletin® Version 4.2.3
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. User Alert System provided by Advanced User Tagging (Pro) - vBulletin Mods & Addons Copyright © 2024 DragonByte Technologies Ltd.
Digital Point modules: Sphinx-based search