CE. Assembly, Pointers, and a dead end menu

Shout-Out

User Tag List

Results 1 to 6 of 6
  1. #1
    Beliroz's Avatar Private
    Reputation
    1
    Join Date
    Sep 2013
    Posts
    6
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    CE. Assembly, Pointers, and a dead end

    I was hoping for some advice, as I'm relatively new to reverse engineering. I've written a few successful bots, but this (simple?) problem I ran into has me stumped:

    I used CE to find a value, I'm sure I have the correct value, now I need its pointer, nothing I haven't done before, I check to see who writes and accesses the address and all signs point to the same direction:

    Code:
    mov eax,[esi+0C]
    ESI has "some hex value" stored, and CE is telling me this is the value of the pointer needed to find this address.

    Great! Now I scan the memory for "some hex value" (making sure to do a new scan, 4 byes, hex is checked) to find addresses that contain this value (which usually gives me a few candidates for the pointer I'm looking for) only to find ... NOTHING! This has never happened to me yet, it's a complete dead end and I have no idea how to proceed. Here is some more assembly:

    Code:
    push esi
    mov esi,ecx
    cmp byte ptr [esi+06],00
    jne prog.exe+640010 (this jne doesn't jump)
    mov eax,[esi+0C]
    Did I forget something? How can this happen? Any advice is greatly appreciated, thanks in advance!

    CE. Assembly, Pointers, and a dead end
  2. #2
    DarkLinux's Avatar Former Staff
    CoreCoins Purchaser Authenticator enabled
    Reputation
    1627
    Join Date
    May 2010
    Posts
    1,846
    Thanks G/R
    193/539
    Trade Feedback
    16 (100%)
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)
    Well the value your looking for will be at the address esi + 0x0C. Or just set a bp just after that line and read eax. That address could be on the heap for all we know. Why not just hook that function and get the address like that every time?
    Last edited by DarkLinux; 09-18-2013 at 04:31 PM.

  3. #3
    Beliroz's Avatar Private
    Reputation
    1
    Join Date
    Sep 2013
    Posts
    6
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by DarkLinux View Post
    Well the value your looking for will be at the address esi + 0x0C
    Yep, this is my known value. It's how I found the assembly above by using the "Find out what accesses/writes this address" function in CE.

    My understand is that since the address at ESI is a heap address, I need to find out what 4-byte pointer (address) on the stack contains the same value (address) that ESI contains. Basically, where the hell did ESI get its value? I've been doing this by a 4-byte search for the hex of 0xWhateverValueESIholds. Unfortunately, this search is coming back with no results, and this is where I'm stuck. The dissassembly shows nothing about where ESI got its value either. Am I misunderstanding something?

  4. #4
    DarkLinux's Avatar Former Staff
    CoreCoins Purchaser Authenticator enabled
    Reputation
    1627
    Join Date
    May 2010
    Posts
    1,846
    Thanks G/R
    193/539
    Trade Feedback
    16 (100%)
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)
    Post the asm code block and I'll take a look. What is the address for anyways? And what game?

  5. #5
    Beliroz's Avatar Private
    Reputation
    1
    Join Date
    Sep 2013
    Posts
    6
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by DarkLinux View Post
    Post the asm code block and I'll take a look.
    I don't think looking at the asm for the function will help but here it is anyway:

    Code:
    push esi
    mov esi,ecx
    cmp byte ptr [esi+06],00
    jne prog.exe+64D31E
    mov eax,[esi+0C] <---------- this is the line that accesses my value
    pop esi
    ret
    I believe what I need is a way to figure out is who writes the value to ESI. How would I go about doing this in CE?

    This asm is for the function that updates item count in the player's inventory for ffxiv.

  6. #6
    DarkLinux's Avatar Former Staff
    CoreCoins Purchaser Authenticator enabled
    Reputation
    1627
    Join Date
    May 2010
    Posts
    1,846
    Thanks G/R
    193/539
    Trade Feedback
    16 (100%)
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)
    Power up IDA and see who calls this function and then look at ecx. Or fallow it back / look at esp.

Similar Threads

  1. The typedef keyword. Functions, function pointers, and you.
    By Cypher in forum WoW Memory Editing
    Replies: 16
    Last Post: 01-07-2009, 12:10 AM
  2. Pointers.. and stuff..
    By undrgrnd59 in forum Programming
    Replies: 1
    Last Post: 11-03-2008, 11:36 AM
  3. Easy Money with RAF and Hallow's End
    By Benjx in forum World of Warcraft Guides
    Replies: 6
    Last Post: 10-20-2008, 02:42 PM
  4. Tickets and rezzing..dead..
    By Randie in forum World of Warcraft Emulator Servers
    Replies: 4
    Last Post: 07-07-2008, 04:55 PM
  5. [Guide] Finding Pointers and Offset Manually.
    By PopcornWoW in forum World of Warcraft Guides
    Replies: 1
    Last Post: 12-23-2007, 07:49 AM
All times are GMT -5. The time now is 05:28 PM. Powered by vBulletin® Version 4.2.3
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. User Alert System provided by Advanced User Tagging (Pro) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.
Google Authenticator verification provided by Two-Factor Authentication (Free) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.
Digital Point modules: Sphinx-based search