Gecko dotNET release thread (version 0.65 now!)

Started by Link, January 03, 2010, 01:33:37 PM

Previous topic - Next topic

Deathwolf

#240
lol with gecko dotnet, the game doesn't freez anymore by activating C2 codes more times!!!! :eek:

nice work!! :D

btw is it possible to change the size on memory viewer?
this would be nice^^
lolz

IRS

dont quit dcx2!!! :( gecko.NET is very helpful ;) its a very nice and easy to use layout on it. dont give up because of the annoying noobs.. we still need people working on these kinds of programs :( id try learning the language to do it in order to help.. but im kinda lost right now just dealing with the ram and asm coding lol

dcx2

Aw, shucks.  ;D  You didn't need to ban him...Mokuro did the same thing a few pages back (posted a bug report in the release thread, did the rolly eyes thing).  If he wants to multi-fail (wrong thread, rude, no details), then I'm fine just ignoring him.  Thanks for the thought, though!

To others...I doubt that I would quit, because most of the features I put in are things I want to use.  I'd probably keep adding features for myself.  But shit like this makes me sympathize with bushing...on the hackmii blog some idiots were whining about the fact that TT was taking their time to release, and he was like "well do it yourself if you're so impatient".

As far as C2 freezes...I write almost exclusively ASM codes, so you think that I might notice that sort of problem sooner or later.  Now, I only have about eight games, and I've used Gecko.NET to hack most of them, but there was an elusive bug that messed up the cheat stream that r91 finally fixed.  I didn't have anything to do with the USB Gecko, Gecko OS, or WiiRDGUI - they were all made before I even owned a Wii - and there's no documentation anywhere that I know of, aside from the comments Link left in the source code.

Quote from: Bully@Wiiplaza on July 27, 2010, 05:41:49 PM
I only wanted to provide some details for bugs, which you requested with your signatur

Why oh why do you fail so hard?  This is the release thread.  The purpose of this thread is to document new releases and what their changes/features are.  This is NOT the bug/feature thread.

And even if it was, you still didn't provide any details.  You applied C2 codes...I do that all the time.  If you can't give me enough details to find or reproduce your bug, then I can't help you (and that's assuming you were polite in the first place).  It works for me on my games.

dcx2

test build r93

-Search result context menu GCT code now loads the value from the New column as the second half of the code, instead of 0
-Added Show Mem support for many more memory instuctions...this should be all of them now
-Show Mem now has a context menu, which shows the memory address and its value when you right-click, and the "label" can be clicked to put that value into the clipboard
-Added "Set SRR0" to disassembly context menu; use this to move the "current instruction" pointer while at a breakpoint or stepping
-ctrl + a in the GCT code text box will select all the text
-AutoHistory should FINALLY default to true!

---

Assuming there are no major flaws in this, it will probably be promoted to an official build in a few days because of the cheat stream bug that was fixed in r91.

dcx2

test build r94

- No more dependency on Ionic.Zip.Reduced because the dll is now merged with the exe
- Search history is stored in a sub-folder to decrease clutter

---

As mentioned before, this is going official in a few days, so I would appreciate any (polite!) feedback

dcx2

test build r95

- Temporarily disabled indexed load/store support in Show Mem (i.e. stwx, etc).

dcx2

test build r96

- Fixed breakpoint branch toggle bug
- Added support for stfd/lfd to Show Mem
- Added support for indexed memory accesses to Show Mem
- Fixed potential breakpoint bug?
- Fixed potential search bug?
- Improved support for logging float register values

- Step Out context menu
-- Clicking on Step Out will behave like normal
-- Right-clicking on Step Out will show three options
--- Walk to blr is exactly the same as clicking on Step Out.  It will repeatedly call Step Over until a blr is encountered.  It is the safest way to find the caller.
--- For functions that do not create stack frames, use Leaf.  It will set an execute breakpoint at the address in LR.  However, if the function has a stack frame, leaf will get lost.
--- For functions with a stack frame, use Stack Frame.  It will parse the stack and set an execute breakpoint on the address in the LR Save Word.  However, if you use it on a leaf function, it will actually step out *twice*.

- Search disassembly with regular expressions
-- If you don't know how to use regex, google it.  wikipedia is a good resource.  http://en.wikipedia.org/wiki/Regular_expression#POSIX_Basic_Regular_Expressions
-- If you don't care about regex, this should work pretty much like you might imagine, except that certain symbols will need escaped.  If you want to use these symbols   \*+?|{[()^$.#   then you need to place a \ in front of it
-- So to match r29, just use r29
-- To match (r29), you will need to use \(r29\)
--- regex is very powerful.  Let's say you want to look for stwx.  Just enter stwx.
--- Let's say you wanted to find stwx, or sthx, or stbx.  stwx|sthx|stbx
--- Let's say you wanted to find any indexed instruction.  You could start with just x.  But any address will have an x, as part of the 0x.  So you could match any x that doesn't have a number from 0 to 9 immediately after it.  x[^0-9]
--- Then you find an 0xf somewhere.  So you want to match x that doesn't have 0 through 9 or a through f immediately after it.  x[^0-9a-f]
--- Then you find an xoris somewhere.  So you want to match instructions that begin with l or s, followed by one or more letters a-z, and then an x, with no 0-9 or a-f immediately after the x.  ^[l|s][a-z]+x[^0-9a-f]
--- That will now match lwx, stwux, stfdx, and so on.

wiiztec asked for disassembly searching a while ago.  Here you go buddy.   ;D

dcx2

test build r98

- MultiPoke improvements!
-- When adding search results to MultiPoke, it will now show all the search results in the History dropdown for the Poke address text box, so you can see what addresses are being MultiPoked.
-- The addresses in the History can be copied and pasted to and from the clipboard, so you can save and load MultiPoke lists.
-- When you click Poke, if the Poke address text box is "MP", then it will poke every address in the History.
-- You can now multi-poke without doing a search, by manually adding items to the Poke address History.
-- If there are values you want to remove from the MultiPoke list, just delete them from the History.

- Disassembly search window is now 1000 instructions, up from 85, now that I figured out how to properly redirect standard output from vdappc...
- Disassembly view shows more lines now if you stretch it out really tall
- Notepad no longer crashes when there's no game name
- When unchecking the Slow checkbox on the About page, it will remember whether the game was paused or running
-- So you can be running at full speed, then switch to 6 FPS to get to some point you want to get to, and then slow it down even more to 0.5 FPS if you want, and when you uncheck Slow, it goes back to running at full speed
-- If you were paused, and stepping through one frame at a time was taking too long, you could set it to 6 FPS and then click Slow, and when you got to the point where you want to go frame by frame you can uncheck Slow and it goes back to being paused so you can now step through frame by frame to the point you want.

---

I also thought up some more good examples of disassembly search regex's.

Let's say you saw that Mario can do a second jump whenever a certain address has a 2 in it.  So you want to look for any li that loads a 2 into any register.

1) Start by looking for li
2) Make sure you look for li at the beginning, so we need the ^; this gives us ^li
3) Make sure to ignore lis by using [^s], which means do not match if there is an s.  So far so good ^li[^s]
4) We want to find the li that is loading a 2.  It doesn't matter what register.  So we use $ to match for the end.  ^li[^s]2$
5) However, that's not going to work.  Because it wants to match ^ = beginning, then an l and an i, then anything that's not an s, then a 2, then the end.  However, we need to match all the crap between the li and the 2.  That's achieved by using . to match anything and * to match anything at least 0 times.  This will absorb all the junk (space, comma, register) between the li at the start and the 2 at the end.  ^li[^s].*2$
6) But then you end up finding things like  li r0,102, so you make sure to match a , before the 2.  ^li[^s].*,2$

Or maybe you want a timer.  Look for addi or subi with a 1.  ^(addi|subi)[^s].*,1$

IRS

you are saying we can search the registers/functions now for when they are finally called on? :O when i get my gecko working again... im switching to finding all my codes with your app!

dcx2

I'm not sure what you mean...

Imagine copying and pasting a thousand lines of disassembly into Windows Notepad, and then using ctrl-f to look for certain strings like addi.  Well, ctrl-f is pretty weak in terms of string matching power...which is why I suggest using regular expressions, so you can parse out exactly what you're looking for.

You can't search the contents of any registers.  You need to use breakpoints for that.  But if something interesting is in r28 and you want to see what instructions referenced r28 nearby, then yeah you can search for r28.

IRS

sorry for being confusing as usual.. lol yes basically that :P your free-time-project is getting pretty darn awesome there ;)

DR4G0N

dcx2 for president  ;D
lol
thanks dude appreciate it you are updating on a regular base

dcx2

test build r100

- Save and Load search histories
- Serial Poke!
-- Load up a bunch of addresses like you were going to multi-poke
-- Put the first address into the Poke address text box
-- Click Serial Poke.  That address will be poked, and the Poke address box will load the next address from the history

For instance, you can search for 3F800000.  Then load all those results into the multi-poke list.  Then, instead of all at once, you can Serial Poke each one, one at a time.  Just spam the Serial Poke button, and whenever you see something's size change, double-click on the history and go back a few to find the address you're looking for.

---

Also, one more example on how to use the new Disassembly Regular Expression Search.  Let's say you're looking for a branch to 0x80123440.  You could just enter the address 80123440.  However, sometimes a branch will actually land *near* that address, like 0x8012343C or 0x80123438.  So you want to look for 8012343C as well.

801234(3[8C]|40)

hetoan2

D: ohnoes not serial pokers >_<

but in all seriousness that feature sounds amazing and i kinda wish i had it in teh past :S


Check out my site with codes obviously...
http://hetoan2.com/

and youtube...
http://youtube.com/hetoan2

dcx2

I honestly think the disassembly search is way more powerful and useful, but after making multi poke based on the address text box history, serial poke was ridiculously easy to add.  And Romaap did ask for it a while back, too.