aldelaro5
Paper Mario P
- Joined
- May 20, 2013
- Messages
- 9,724
- NNID
- aldelaro5
- 3DS FC
- 3050-7721-6617
Hi 
So following some updates I posted about the situation with Dolphin debugger in the new hacker thread, I was bringing the fact I was developping a new RAM search for Dolphin because the existing solution, Cheat Engine had a tons of problems. I was told it would be interesting to keep people updated about that.
Well, I released the first beta version of the program woooooo!!!
https://github.com/aldelaro5/Dolphin-memory-engine
For binaries without build required, go to the release tab.
I should link my TASVideos thread on this because I go into MUCH more details about the program, why it will replace CE for Dolphin at one point etc...
http://tasvideos.org/forum/viewtopic.php?t=19437
But for this thread's purposes, let me make a simpler version.
This is a RAM search, a program made to browse, track, monitor and edit the RAM of a process at runtime. Basically, you run ssbm in Dolphin, use a RAM search and you get to have real time updates on the memory of ssbm as well as a way to search memory (so like stuff like percent counters or.....well anything that is memory).
Cheat Engine has been so far the only really good RAM search for Dolphin because it supports big endian memory, something that is needed because the GameCube is using big endian memory and.....well it's Cheat Engine, it's really one of the best RAM search out there.
.....but it wasn't really made for what you would try to do with Dolphin. CE is really good for stuff like pc games or honestly any process on a standards pc usually works very well. Dolphin.....well yeah it's a pc process, the problem is it uses a different endiannes (standard pc are little endian, NOT big endian), it's in PowerPC (standard PC are x86 or x86-64) and it has a custom memory mapping because the RAM of the GameCube virtually doesn't start at 0x00000000, it starts at 0x80000000 so basically, CE has a lot of problem to deal with this. Including, but not limited to:

It's beta release so don't mark it as STABLE, the UI can be clunky, but to be honest, it has a functional scanner and a functionnal watcher with file saving support so in theory, you COULD start using it over CE, but it lacks a lot of features I plan to incrementally add later (like a memory viewer).
Little screenshot
The top part when you start it will prompt you to hook to Dolphin and to do that, you need to have Dolphin running AND an emulation started so just boot SSBM before you click hook.
As for MEM2, you shouldn't care about this unless you plan to use it on Wii game, just click auto detect and it should detect it's a Gamecube game so it will disable it. The quick gist is that the Wii has an extra memory region the GC does not have and this option take the presence or absence of this region into consideration so yeah for ssbm, make sure it's always disabled.
Once it's hooked.....really it's very similar to CE, you scan, add watches and save (check the file menu it saves .dmw files, but they are just JSON so you can edit them with a text editor).
.....that's it. If you used CE before you might have a lot of question like how is the endiannes handled? Why it guessed the start address and just works? Also WUT?
POINTERS???
Okay let me start about the last one, YES this supports multilevel pointers and unlike CE, they ACTUALLY work. .....okay technically they only work for 75% of the game, but I am certain ssbm is part of these so no worries
What's actually happening is that again, it's like CE, you specify an address and then the offsets to the pointer chain and now you have an unbreakable link to the pointer. Any read will use the entire path to report the value and any write will follow back to write so essentially, they look the exact same thing as static addresses, but are clearly not static and are moving around.
The thing is, finding a pointer path altough was okay in CE, it still required you to check assembly to figure out where it would read or write from and with what offset. I can't obvsiouly get this from Dolphin, but Dolphin itself can already with its debugger. If you want to learn more, read the tasvideos thread I linked above, it's a section about a quick debugger tutorial specifically made to find pointers. It's involved, but necessary and I cannot simplify this process even if I wanted to (I technically might if it was integrated, but for many reaosns, I decided to make this program external).
But finally it works! no more "Hey guys I found this interesting address! :D but it's a freaking pointer
", instead you will actualy try to find the pointer path.
Okay about the start addres.....this is actually a surprinsignly simple solution despite the annoyance the problem caused: Dolphin is open source so I just looked at the code, checked how it initialises its memory (information about the mapping) and I basically just query with these criteria and BOOM, I have the start, but the best part is it will work EVERYTIME, even rebooting Dolphin with a new start won't change the fact that it will get it right....normally I mean if it doesn't, it's a bug (and you shoudl definetely tag me about it btw, I explain in the TASVdioes thread around the end of it how you can confirm it got the right address). It's now super simple, press hook, done
(if you haven't used CE before, this is a pain, like you have to specify manually a range of address and it screws up what the ACTUALL address were).
Lastly about endiannes? This is a Dolphin RAM search so all endianness conversion is done automatically, you never have to worry about it.
This is a very simplified and short version of my tasvideos thread, but it's simply because tbh, I explain everything there and for this, my main purpose was to explain what is the project and what it can do to ssbm hacking (or heck, ANY game hacking, I already received comments that people said it would deifnetely help).
Wtih that, if you find any bugs, please actually tag me, if it's a breaking one, I will likely do a point release.
Enjoy RAM searching ssbm
BTW: idk what is going on with images links, but if they don't work, it's not me, idk why.....
So following some updates I posted about the situation with Dolphin debugger in the new hacker thread, I was bringing the fact I was developping a new RAM search for Dolphin because the existing solution, Cheat Engine had a tons of problems. I was told it would be interesting to keep people updated about that.
Well, I released the first beta version of the program woooooo!!!
https://github.com/aldelaro5/Dolphin-memory-engine
For binaries without build required, go to the release tab.
I should link my TASVideos thread on this because I go into MUCH more details about the program, why it will replace CE for Dolphin at one point etc...
http://tasvideos.org/forum/viewtopic.php?t=19437
But for this thread's purposes, let me make a simpler version.
This is a RAM search, a program made to browse, track, monitor and edit the RAM of a process at runtime. Basically, you run ssbm in Dolphin, use a RAM search and you get to have real time updates on the memory of ssbm as well as a way to search memory (so like stuff like percent counters or.....well anything that is memory).
Cheat Engine has been so far the only really good RAM search for Dolphin because it supports big endian memory, something that is needed because the GameCube is using big endian memory and.....well it's Cheat Engine, it's really one of the best RAM search out there.
.....but it wasn't really made for what you would try to do with Dolphin. CE is really good for stuff like pc games or honestly any process on a standards pc usually works very well. Dolphin.....well yeah it's a pc process, the problem is it uses a different endiannes (standard pc are little endian, NOT big endian), it's in PowerPC (standard PC are x86 or x86-64) and it has a custom memory mapping because the RAM of the GameCube virtually doesn't start at 0x00000000, it starts at 0x80000000 so basically, CE has a lot of problem to deal with this. Including, but not limited to:
- It cannot track pointers so no way to track dynamic memory within Dolphin
- It constatly need to be aware of Dolphin's start address which just keeps changing as of more recent revisions and ONE change requires an ENTIRE recalculation of the entire table, yikes
- You need to add type extensions for it to work with big endian, it's just annoying
It's beta release so don't mark it as STABLE, the UI can be clunky, but to be honest, it has a functional scanner and a functionnal watcher with file saving support so in theory, you COULD start using it over CE, but it lacks a lot of features I plan to incrementally add later (like a memory viewer).
Little screenshot

The top part when you start it will prompt you to hook to Dolphin and to do that, you need to have Dolphin running AND an emulation started so just boot SSBM before you click hook.
As for MEM2, you shouldn't care about this unless you plan to use it on Wii game, just click auto detect and it should detect it's a Gamecube game so it will disable it. The quick gist is that the Wii has an extra memory region the GC does not have and this option take the presence or absence of this region into consideration so yeah for ssbm, make sure it's always disabled.
Once it's hooked.....really it's very similar to CE, you scan, add watches and save (check the file menu it saves .dmw files, but they are just JSON so you can edit them with a text editor).
.....that's it. If you used CE before you might have a lot of question like how is the endiannes handled? Why it guessed the start address and just works? Also WUT?

POINTERS???
Okay let me start about the last one, YES this supports multilevel pointers and unlike CE, they ACTUALLY work. .....okay technically they only work for 75% of the game, but I am certain ssbm is part of these so no worries
What's actually happening is that again, it's like CE, you specify an address and then the offsets to the pointer chain and now you have an unbreakable link to the pointer. Any read will use the entire path to report the value and any write will follow back to write so essentially, they look the exact same thing as static addresses, but are clearly not static and are moving around.
The thing is, finding a pointer path altough was okay in CE, it still required you to check assembly to figure out where it would read or write from and with what offset. I can't obvsiouly get this from Dolphin, but Dolphin itself can already with its debugger. If you want to learn more, read the tasvideos thread I linked above, it's a section about a quick debugger tutorial specifically made to find pointers. It's involved, but necessary and I cannot simplify this process even if I wanted to (I technically might if it was integrated, but for many reaosns, I decided to make this program external).
But finally it works! no more "Hey guys I found this interesting address! :D but it's a freaking pointer
Okay about the start addres.....this is actually a surprinsignly simple solution despite the annoyance the problem caused: Dolphin is open source so I just looked at the code, checked how it initialises its memory (information about the mapping) and I basically just query with these criteria and BOOM, I have the start, but the best part is it will work EVERYTIME, even rebooting Dolphin with a new start won't change the fact that it will get it right....normally I mean if it doesn't, it's a bug (and you shoudl definetely tag me about it btw, I explain in the TASVdioes thread around the end of it how you can confirm it got the right address). It's now super simple, press hook, done
Lastly about endiannes? This is a Dolphin RAM search so all endianness conversion is done automatically, you never have to worry about it.
This is a very simplified and short version of my tasvideos thread, but it's simply because tbh, I explain everything there and for this, my main purpose was to explain what is the project and what it can do to ssbm hacking (or heck, ANY game hacking, I already received comments that people said it would deifnetely help).
Wtih that, if you find any bugs, please actually tag me, if it's a breaking one, I will likely do a point release.
Enjoy RAM searching ssbm
BTW: idk what is going on with images links, but if they don't work, it's not me, idk why.....