Codes
WiiRd forum
December 07, 2022, 03:14:47 AM *
Welcome, Guest. Please login or register.

Login with username, password and session length
News: Welcome on the new server

Update 4.3 - do NOT update!
Gecko 1.9.3.1
Should I get a USB Gecko, I wanna hack?
How do I use my USB Gecko
Where can I get WiiRd?
 
   Home   CODE DATABASE GAMEHACKING Help Search Login Register  
Pages: 1 [2] 3 4 ... 52
  Print  
Author Topic: Gecko dotNET Bugs and Requests  (Read 103353 times)
Mal1t1a
I love hacking. Programming as well.
Hacker
Jr. Member
*****

Karma: 0
Posts: 53

I <3 Hacking


WWW
« Reply #15 on: March 07, 2010, 04:59:23 PM »

Bullet time would be cool, but just think on how bad it would be  Grin All you do is just use massive amounts of the Wii's memory to get bullet time Tongue

It would still be a great thing to add though Smiley
Logged

Hacking is not always about ruining the game for others, its about making the game funner and seeing what is possible and what is not.
dcx2
Computer Engineer
Moderator
Legendary Member
*****

Karma: 165
Posts: 3468


WWW
« Reply #16 on: March 07, 2010, 08:05:07 PM »

When you right-click -> Breakpoint in memory viewer or search, if breakpoint field is set to execute, change it to read/write, else leave it alone.

In the disassembly tab, when pressing left/up and right/down to scroll, it can't get past where the breakpoint's-disassembly-window.  You need to use the scroll arrows on the side to get past the edge.  I wish left-right would still work the same, but up-down would act more like the scroll bar's up and down.

When setting a breakpoint, why does the cancel button get so big?

Some changes to MemoryViewer.Update() -

Code:
       public void Update()
        {
            // Only clear and re-load gView.Rows when it's != 16
            // This was one thing slowing us down...
            if (gView.Rows.Count != 16)
            {
                gView.Rows.Clear();
                gView.Rows.Add(16);
            }

//....
            try
            {
                gecko.Dump(sAddress, sAddress + 0x100, miniDump);

// don't need this now
//                gView.Rows.Add(16);

// loops 'n stuff...

// this was another thing slowing us down, it was firing events
                //gView.Rows[oldRow].Cells[oldCol].Selected = true;

//....
        }

Those changes got me 11 FPS, 2-3x faster.  The bottleneck is now Dump.

---

I'm gunna start playing with the control properties to see if I can get everything to be re-sizeable now.
« Last Edit: March 11, 2010, 04:14:00 AM by dcx2 » Logged

dcx2
Computer Engineer
Moderator
Legendary Member
*****

Karma: 165
Posts: 3468


WWW
« Reply #17 on: March 09, 2010, 12:48:10 AM »

I don't think the Different By search worked, I tried different by 1 and it was returning results where last == current. (DifferentBy failed on only the first search after an unknown search: fixed)

Suggestions: change the RegisterDialog's AcceptButton and CancelButton properties to CheckInput and button2.  This way, pressing Enter is like clicking OK and pressing Escape is like clicking Cancel.

Save and Load search results

Double click a b or bl in the disassembly and it jumps there

Something else that might be interesting - if a register is a valid pointer, perhaps a button that will point the Memory Viewer to the pointer? (next feature made this less useful)

Even better, if the current instruction in the breakpoint-disassembly window is a Load or Store, parse the instruction using the value in the register as a pointer and adding the offset, then set the Memory Viewer on that value.

An offset field in Memory Viewer so I can put the pointer in one field and the offset in another and spare myself using calc all the time. (previous feature made this less useful)

Parse the CR to determine if a conditional branch will be taken or not, and write the next address (or taken/not taken) to a label beside the disassembly window on the breakpoints tab, or color the branch's text green/red

EDIT:

Branch finder in the disassembly window.  Enter a range of target addresses and it will scan up the disassembly, looking for branches that land in the target address range.  Technically challenging but it would be SO satisfying to use.  Find everyone who calls a certain function with bl.  Find all of the execution paths that lead to a given instruction.

The only problem would be that you couldn't parse blr or bctr or bctrl.
« Last Edit: March 24, 2010, 12:49:49 PM by dcx2 » Logged

dcx2
Computer Engineer
Moderator
Legendary Member
*****

Karma: 165
Posts: 3468


WWW
« Reply #18 on: March 11, 2010, 04:20:39 AM »

So I crossed off all the changes that Link and I have made so far.  I also have more suggestions to add to this list...I keep coming back to this thread to see what else I can do.

---

Hook a timer up to the Next button in an attempt to fake an adjustable framerate

If stepping in the breakpoint tab, and there's a conditional branch encountered, a button that indicates whether it is taken, _and_ the ability to switch it back and forth by adjusting the CR

The same button could be used on load/store to flip to the destination in the Memory Viewer tab

EDIT:

DifferentBySigned; so you can look for only a down-counting timer using differentBy -1 or only an upcounting timer with 1
« Last Edit: March 28, 2010, 12:52:32 AM by dcx2 » Logged

dcx2
Computer Engineer
Moderator
Legendary Member
*****

Karma: 165
Posts: 3468


WWW
« Reply #19 on: March 12, 2010, 12:37:05 PM »

The ability for Memory Viewer to set data breakpoints that are not aligned with 0x04 based on which byte the mouse right-clicked.  This might get tricky...hit detection on the width of the cell?  Compensate for blank spaces at each end of the cell?

Instead of "differentBySigned", how about changing "upper" value searches to be more generic.  Give "upper" a Comparison Type groupbox.  Then, we could set lower to be >= and upper to be <=, inclusive, or exclusive if you use > or <.  More interesting is using DifferentBy in combination with > or < to help find counters; DifferentBy 1 and < last value is always going down

I think I've seen this before somewhere else, but if we added a "First" or "Cached" to complement the "Last", then there's even more flexibility in having the two groupboxes.

A brand-new shiny combo box which can change the poke operation you're doing, idea courtesy of Dude.  Currently, Poke is a write-only operation.  Why not add set, clear, toggle, add, and subtract?  In fact, I'll do that right now...  There will be a new Poke Operation combo box on the Memory Viewer tab in the next release.   Grin
« Last Edit: March 24, 2010, 12:51:17 PM by dcx2 » Logged

dcx2
Computer Engineer
Moderator
Legendary Member
*****

Karma: 165
Posts: 3468


WWW
« Reply #20 on: March 12, 2010, 06:03:56 PM »

Combed the WiiRDGUI "Ideas for new WiiRD" thread for suggestions...

Option to always stay on top.  Consider using Settings, which stores variables in a "exe.config" file beside the exe.  If you wanted to change this, at first we can hand edit, but eventually a button somewhere (About?) to enable this would be cool.

Sort code search results?

The ability to remove entries from the search results if you know they aren't what you want (right-click?)

Something that saves the current values of the important controls, so that way the next time you load that game (or if the app crashes), it will re-load the breakpoints/memory viewer/disassembly values you were working on, instead of starting you off at 80000000 again.  EDIT: This would be another great place to use the Settings features

Does the one-line assembler in the disassembly tab erase what you wrote if you provide an invalid entry?  WiiRDGUI did that, and it sucked if you mis-typed one character cos you would have to re-type the whole instruction again...I'll check when I get home tonight.  The one-line assembler never suffered from this bug ^_^

When right-clicking in Memory Viewer, it should select the right-clicked cell before popping up the context menu.

Live update of search results, kinda like memory viewer.  Probably will require some restriction, like "only updates highlighted result" or "only works when you have <20 results" or something. (This is basically what the Watch List can do)

Step Out Of.  Basically, this repeatedly calls "Step Over" until the current instruction is blr.  Potentially slow, because it's only executing two or three instructions per second...

Load GCT From File, pops up an OpenFileDialog that lets us import codes from a GCT file.  EDIT: Load gct files from geckocodes.org!

The ability to copy the list of Breakpoint Conditions into the clipboard.  Mostly useful if you have a list of addresses not to break on using SRR0 != conditions.
« Last Edit: March 28, 2010, 12:58:09 AM by dcx2 » Logged

GaryCXJk
Hacker
Full Member
*****

Karma: 15
Posts: 204


« Reply #21 on: March 12, 2010, 07:13:40 PM »

Instead of auto-updating I think the best would be a button to update the search results. Live updates will still severely slow down the game.
Logged
dcx2
Computer Engineer
Moderator
Legendary Member
*****

Karma: 165
Posts: 3468


WWW
« Reply #22 on: March 13, 2010, 02:23:41 AM »

Hm...for the "next" button, the current mechanism is to "unpause, wait about 10+ ms, pause".  Link has mentioned before that it wouldn't be too bad of an idea to set an execute breakpoint on the entrance to the code handler.  Should the next button do that, instead, or are there good reasons to stick with the current mechanism?
Logged

Mal1t1a
I love hacking. Programming as well.
Hacker
Jr. Member
*****

Karma: 0
Posts: 53

I <3 Hacking


WWW
« Reply #23 on: March 13, 2010, 03:16:04 AM »

You can always try, personally, I prefer the "unpause wait 1ms, pause" I've found that in my tests, 100 MS was wayy to much, and 1ms was perfect. I have not tried 10 ms. You guys just keep experimenting with stuff, and report back. if(betterway==True){ Msgbox("yay!") }else{ Msgbox("its okay!") }
Logged

Hacking is not always about ruining the game for others, its about making the game funner and seeing what is possible and what is not.
dcx2
Computer Engineer
Moderator
Legendary Member
*****

Karma: 165
Posts: 3468


WWW
« Reply #24 on: March 13, 2010, 03:41:56 AM »

It's not 100 ms, it's 10 ms, but it's a call to sleep, which only promises to wait at least 10 ms.  It usually will, but not always.  So it's entirely possible you don't actually get to the "next frame", but like two or three frames after.

In contrast, breaking on the entrance to the code handler means that exactly one frame passes every time you hit next, no more, no less.  And the processor will always be at the same point in the code when the game stops.
Logged

elmoreas
I try to be helpful
Jr. Member
**

Karma: 10
Posts: 92

elmoreas
« Reply #25 on: March 19, 2010, 08:50:31 AM »

Not sure if it has been mentioned or if anyone else is having the issue but when I try to use the convert dec to hex radio button nothing happens, the button doesn't actually click nor does it convert the number to hex. Its not really an issue for me as I just use the Scientific mode on the PC calculator but dcx2 told me to drop by here if I ran into any issues while using Gecko dotNet. Other than that this works great and I am very happy with it, way to go. Since Wiird stopped working on WW/VC games for me this has been a god send so thanks again. Talk to you guys later.

Sincerely,
Elmoreas
Logged

"I am new but I am learning"
"I help others not to help myself but just to help others"
"I may need help now but I may be able to help you in the future so rember the Golden Rule"
Dude
Full Member
***

Karma: 4
Posts: 117


« Reply #26 on: March 19, 2010, 09:46:38 AM »

I've tried out Gecko.net and gotta say that it seems a lot more stable than WiiRD.  I also have no issue with connecting with the GeckOS, too.  Awesome work guys!

I have ran into an irritating bug though, I think.

It seems that Gecko.net is removing valid finds in the found code list.  I tested by doing a search in a small part of memory that I know isn't modified by anything at the time.  I checked the values in the Memory viewer (the memory range I selected had about 6 sets of 32bit values all filled with FF) and did an 8bit equal search for FF.  It found them all but when I refined the search it would decreases the found code list by one.  It would keep decreasing everytime I refined until it reached down to one code found.

I tested again using all search sizes (8/16/32) and even paused the game using the debugger but it always decreased the found code count by 1 and removed the last item in the list.
Logged
dcx2
Computer Engineer
Moderator
Legendary Member
*****

Karma: 165
Posts: 3468


WWW
« Reply #27 on: March 19, 2010, 11:21:46 AM »

elmoreas - right-click the field you want to dec->hex.  You can do dec->hex, hex->dec, float->hex, hex->float conversions from the context menu.

Dude - Hm...I'll look into this.

EDIT:

elmoreas - As it turns out, the Comparison type Value textbox does not have the conversion context menu attached to it.  Right-click the Poke Value textbox to see the menu I'm talking about.

I'll have this fixed for the next release.  ^_^

EDIT2:

O_O  That dec -> hex box should only be enabled for DifferentBy searches...it turns out I wasn't properly disabling/enabling controls.  That, too, will be fixed.
« Last Edit: March 20, 2010, 12:13:19 PM by dcx2 » Logged

dcx2
Computer Engineer
Moderator
Legendary Member
*****

Karma: 165
Posts: 3468


WWW
« Reply #28 on: March 19, 2010, 02:25:04 PM »

Wow, there's was a comparison that should have be <= and was only <.  A very difficult thing to spot...and it didn't always appear to trim your search results.  Good catch!  The fix will be in the next release.

It appears there's also an odd bug where deleting an entry in the search results will cause the next set of refined results to be slightly different.  I'll try to nail this one tonight.  I love the sound of squishing a bug!
« Last Edit: March 20, 2010, 12:52:12 AM by dcx2 » Logged

Panda On Smack
Hacker
Hero Member
*****

Karma: 39
Posts: 606


« Reply #29 on: March 19, 2010, 02:59:21 PM »

Cheers guys, thanks for your hard work
Logged
Pages: 1 [2] 3 4 ... 52
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2013, Simple Machines Valid XHTML 1.0! Valid CSS!