Hacking Development of new Wii U RAM Debugger

  • Thread starter Thread starter BullyWiiPlaza
  • Start date Start date
  • Views Views 25,575
  • Replies Replies 80
  • Likes Likes 22
@BullyWiiPlaza Would you be willing to correct the "Parse Pointer Expression" button in the Add Code window. Jgecko only allows you to Paste in a 2 stage pointer at max, but the code handler supports infinite pointer depth.

To save you the thinking time, all you need to really do is add:

30100000 00000000
10000000 50000000
31000000 0xOFFSET

for every additional offset that is added.

As an additional example, if you need.

This:

30000000 101C1D40
10000000 50000000
31000000 00002580
30100000 00000000
10000000 50000000
31000000 00000B24
30100000 00000000
10000000 50000000
31000000 00000040
30100000 00000000
10000000 50000000
31000000 00000970
30100000 00000000
10000000 50000000
31000000 0000000C

represents loading the 5 stage pointer of [[[[[0x101C1D40] + 0x2580] + 0xB24] + 0x40] + 0x970] + 0xC



If you wanna be fancy, since you have the ability to read the games memory region, you could replace the lines that say 10000000 50000000
with the correct range for that game.


This would only be a convenience feature but it would certainly be nice :3
 
  • Like
Reactions: BullyWiiPlaza
@BullyWiiPlaza Would you be willing to correct the "Parse Pointer Expression" button in the Add Code window. Jgecko only allows you to Paste in a 2 stage pointer at max, but the code handler supports infinite pointer depth.
Ah, yes.
If you wanna be fancy, since you have the ability to read the games memory region, you could replace the lines that say 10000000 50000000
with the correct range for that game.
I did that before but the correct range is undefined because it's up to the person's judgment how big it should be. I actually did it before but which size should the range use by default? I don't know. People can adapt it later then I guess if they don't like it. But yeah, agreed. I will implement your suggestions. :P

EDIT:
Done with the non-fancy version lol. Also value parsing is supported to generate a RAM write line:
Code:
[[[[[0x101C1D40] + 0x2580] + 0xB24] + 0x40] + 0x970] + 0xC = 0x1337
 
Last edited by BullyWiiPlaza,
  • Like
Reactions: skoolzout1
Ah, yes.

I did that before but the correct range is undefined because it's up to the person's judgment how big it should be. I actually did it before but which size should the range use by default? I don't know. People can adapt it later then I guess if they don't like it. But yeah, agreed. I will implement your suggestions. :P

EDIT:
Done with the non-fancy version lol. Also value parsing is supported to generate a RAM write line:
Code:
[[[[[0x101C1D40] + 0x2580] + 0xB24] + 0x40] + 0x970] + 0xC = 0x1337
Thats an awesome addition! Its probably too late and probably more work than it is worth, but would adding the ability to assign Negative values be worth your time?

example: [[[[[0x101C1D40] + 0x2580] + 0xB24] + 0x40] + 0x970] + 0xC = -0x1337

I know for me personally i often make mistakes when doing negative values in my head lol, so it'd be a pleasant addition.

And again if you're feeling really fancy, you could add support for different Bases/data types, like Decimal,Float,Ascii/UTF-8,and maybe binary if you wanted

examples: [[[[[0x101C1D40] + 0x2580] + 0xB24] + 0x40] + 0x970] + 0xC = 0x1337 (Hex)
[[[[[0x101C1D40] + 0x2580] + 0xB24] + 0x40] + 0x970] + 0xC = 4919 (DEC)
[[[[[0x101C1D40] + 0x2580] + 0xB24] + 0x40] + 0x970] + 0xC = 0b1001100110111 (BIN)
[[[[[0x101C1D40] + 0x2580] + 0xB24] + 0x40] + 0x970] + 0xC = "asdf" (UTF-8)


I don't know if there is a notation for floating points, you could probably just interpret any number that has a decimal point as intended to be a floating point.
example: [[[[[0x101C1D40] + 0x2580] + 0xB24] + 0x40] + 0x970] + 0xC = 1.0

At this point i feel like it might be more work than its worth (especially for the amount of people that would actually use it.) But it would be fancy :3
 
Last edited by skoolzout1,
Yeah lol, if this gets out of hand I might as well implement an entire scripting language to "compile" cheat code but hell no, of course not happening.
It's pointless but would be a possibility to make the generation "super good". I won't do any of your suggestions this time though as it leads to far. You can easily make 32-bit negative values yourself with the following simple calculation:
Code:
0x1000000000 - 0x1337 = 0xFFFFFECC9

:P
 
Last edited by BullyWiiPlaza,
  • Like
Reactions: skoolzout1
Yeah lol, if this gets out of hand I might as well implement an entire scripting language to "compile" cheat code but hell no, of course not happening.
It's pointless but would be a possibility to make the generation "super good". I won't do any of your suggestions this time though as it leads to far. You can easily make 32-bit negative values yourself with the following simple calculation:
Code:
0x1000000000 - 0x1337 = 0xFFFFFECC9

:P
That's certainly understandable. Thank you for taking suggestions though! If I find anything else that could easily be fixed or improved I'll let you know. But honestly, I don't think there's really much else that needs improving.
 
  • Like
Reactions: BullyWiiPlaza
@BullyWiiPlaza

I have more suggestions! Please don't think of these as demands. These literally are only suggestions for you if you desire to implement them :P i personally will be able to sleep just fine at night if you decide you don't want to do them. And do not feel like there is any rush in implementing them if you decide you want to.

1. Ability to copy the Previous and Current values in the search results.
2. Make the Value box and the Poke Value box adjust to only allow an entry of the Search data size. for example.. if im about to enter an 8 bit value to search for, make it stop after two digits, same with the Poke Value box. You already did this in the memory Viewer Value box.
3. this goes hand in hand with number 1. Allow the copying of all Addresses/Current/Previous values from the search result. So basically if i highlight a group of search results, add a Right Click option to Copy All Addresses from Selection, Copy All Previous Values from Selection, and current values too.
4. In the Memory Viewer, add a "Go Back" button. Right now, you have the ability to go to an address by clicking on it, but no way to return the previous address after that other than manually typing it back in. :P

I dont know if this last one deserves its own number, but would you be able to disable the memory viewer from scrolling when a box is highlighted? when Auto-Update is not on, it works fine and doesnt do anything unusual when you click on a box. But when Auto-Update is on, if i click on any box below the first line, it jumps down to that line, this isnt usually a problem, however this often screws me up even more when i intended to double click on an address to go to it, but it moves the whole display downwards before im even done double clicking lol.

If you don't want to fully disable it, you could add a Toggle checkbox for it if you wanted.
 
Last edited by skoolzout1,
@BullyWiiPlaza

I have more suggestions!
Nice suggestions besides 2. :P
It is done on purpose so you can do conversions via right-click.
Only the final value needs to be small enough. Conversions can potentially decrease the value size.
This is the "improved" way of handling this in my opinion so you don't always need to input the hexadecimal.

EDIT:
All suggestions implemented :D
  • Parse Pointer Expression now uses the actual realistic memory range
  • Copy all addresses, previous values, current values added to the search table context menu
  • Added memory viewer poke address field independent from the current memory page address so it won't scroll anymore during auto-update
  • Address history with previous address functionality implemented on the memory viewer (and disassembler)
382070-2017-06-25_16h39_19.png
 
Last edited by BullyWiiPlaza,
  • Like
Reactions: skoolzout1
Nice suggestions besides 2. :P
It is done on purpose so you can do conversions via right-click.
Only the final value needs to be small enough. Conversions can potentially decrease the value size.
This is the "improved" way of handling this in my opinion so you don't always need to input the hexadecimal.

EDIT:
All suggestions implemented :D
  • Parse Pointer Expression now uses the actual realistic memory range
  • Copy all addresses, previous values, current values added to the search table context menu
  • Added memory viewer poke address field independent from the current memory page address so it won't scroll anymore during auto-update
  • Address history with previous address functionality implemented on the memory viewer (and disassembler)
382070-2017-06-25_16h39_19.png
Wow! Absolutely amazing work!
 
  • Like
Reactions: BullyWiiPlaza
@BullyWiiPlaza I wish I had remembered to mention this a while ago, but the next time you want to update Jgecko, would you consider adding an additional search type?

So right now there are "Unknown" and "Specific" search types, I was thinking it would be helpful to add a type called something like "Compared to First Scan"
and the comparison types would be very similar or identical to the comparisons in "Unknown"

This idea stemmed from the fact that sometimes you are searching for an unknown value, and you've already completed a few scans, and the thing that you are searching for visibly returns to the way it was on the initial scan. Being able to filter results by testing equality with the initial scan at that point would eliminate many many more results than you could with just the "Unknown" comparisons.

What do you think?
 
so
i havent coded in a while but
if i was to start again
could i do the following for mk8?
1. make music not lap when races are over
2. two item system instead of one(using the star's set up as it allows for two items)
 
@BullyWiiPlaza I wish I had remembered to mention this a while ago, but the next time you want to update Jgecko, would you consider adding an additional search type?

So right now there are "Unknown" and "Specific" search types, I was thinking it would be helpful to add a type called something like "Compared to First Scan"
and the comparison types would be very similar or identical to the comparisons in "Unknown"

This idea stemmed from the fact that sometimes you are searching for an unknown value, and you've already completed a few scans, and the thing that you are searching for visibly returns to the way it was on the initial scan. Being able to filter results by testing equality with the initial scan at that point would eliminate many many more results than you could with just the "Unknown" comparisons.

What do you think?
This would mean that basically all memory states have to be cached in the RAM which turns out to be very bad for lower RAM users since it is unknown whether you end up needing it or not. Simply speaking, this is not such a good idea. :/
 
Last edited by BullyWiiPlaza,
tried the last version from github but the connect is always greyed out :(

is it normal ?

and when i click help i get
java.lang.NullPointerException
at java.io.Reader.<init>(Unknown Source)
at java.io.InputStreamReader.<init>(Unknown Source)
at org.apache.commons.io.IOUtils.copy(IOUtils.java:1906)
at org.apache.commons.io.IOUtils.toString(IOUtils.java:778)
at org.apache.commons.io.IOUtils.toString(IOUtils.java:759)
at wiiudev.gecko.client.gui.GUIUtils.resourceToString(GUIUtils.java:20)
at wiiudev.gecko.client.gui.ConnectionHelper.displayConnectionHelperMessage(ConnectionHelper.java:13)
at wiiudev.gecko.client.gui.JGeckoUGUI.displayConnectionHelperMessage(JGeckoUGUI.java:683)
at wiiudev.gecko.client.gui.JGeckoUGUI.lambda$configureConnectionTab$19(JGeckoUGUI.java:366)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)


I encountered the same problem since re-installing Windows, and installing the latest Java JRE8 (as of 2018-09-01) and downloading the latest available JGeckoU jar from GitHub.

If I go to the "Miscellaneous" tab and hit the "update game titles" button, the "Connect" button is now usable. My guess from a quick analysis is that JGeckoU possibly does some sort of "detect if network is available" function at application startup (i.e. when it's attempting to communicate with wiiubrew.org). Since that initial function call fails, it doesn't set "network is available" until that functionality is again called when executing the "update game titles" function.

:)

Keep up the great work!
 
I encountered the same problem since re-installing Windows, and installing the latest Java JRE8 (as of 2018-09-01) and downloading the latest available JGeckoU jar from GitHub.

If I go to the "Miscellaneous" tab and hit the "update game titles" button, the "Connect" button is now usable. My guess from a quick analysis is that JGeckoU possibly does some sort of "detect if network is available" function at application startup (i.e. when it's attempting to communicate with wiiubrew.org). Since that initial function call fails, it doesn't set "network is available" until that functionality is again called when executing the "update game titles" function.

:)

Keep up the great work!
Kind of but I permanently fixed the issues now. The update will be released later. :)
 
Still one more quirk: why is it attempting to run ghs-demangle dot exe at startup?

Thanks.

--------------------- MERGED ---------------------------

Still one more quirk: why is it attempting to run ghs-demangle dot exe at startup?

Thanks.

figured it out (demangler tool mentioned in other threads).
 

Attachments

  • screen.png
    screen.png
    5.2 KB · Views: 219

Site & Scene News

Popular threads in this forum