Cheat Engine Forum Index Cheat Engine
The Official Site of Cheat Engine
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 


Mono features getting disabled when stepping code

 
Post new topic   Reply to topic    Cheat Engine Forum Index -> Cheat Engine
View previous topic :: View next topic  
Author Message
fakerlol
Newbie cheater
Reputation: 0

Joined: 06 Feb 2016
Posts: 21

PostPosted: Wed Nov 25, 2020 1:24 pm    Post subject: Mono features getting disabled when stepping code Reply with quote

So I've been using CheatEngine for some time now and was mesmerized by the Mono utilities which were introduced some years ago.

I really love the freedom this gives to me, as I can not only change minor things, but can even add whole modifications of the game without having to spend hours trying to figure out where to hook into and what how methods are linked together.

As far as I can recall, I was able to set a breakpoint somewhere with Mono features enabled (and seeing the labels instead of addresses) and use the debugger to step within the code.

For at least 2 major updates it won't work for me, at all. Whenever I use the debugger to step withint the code or "find out what writes to an adress", CE disables the Mono features with a LUA-Error ("Failed to launch..."), leaving me with boring hexadecimal addresses instead of labels.
With the latest release (v7.2) it outright hangs up for several seconds up to a minute before displaying an error.

Isn't the Mono features supposed to work with the (VEH) debugger or am I just the odd one out?
This really kills my joy working with mono-code, as I have to re-enable Mono features every time I "deep-dived" into the code Sad
Back to top
View user's profile Send private message
Dark Byte
Site Admin
Reputation: 471

Joined: 09 May 2003
Posts: 25831
Location: The netherlands

PostPosted: Wed Nov 25, 2020 2:04 pm    Post subject: Reply with quote

When you look at an address, CE will ask the mono process what the name of that address is
If it takes longer than 3 seconds, ce will disconnect from the mono system to prevent a full freeze

When a breakpoint hits, CE also asks that mono process what the name is, but since the target process is frozen, it will not respond, so therefore it will disconnect.

In the previous version where CE didn't disconnect, CE would try not show any symbols at all if any breakpoint is set or the target is halted on a breakpoint, but since sometimes a breakpoint hits because the address is fetched, that would cause CE to freeze infinitely, so I went for a timeout system instead.
At least this way you don't have to restart CE when a breakpoint hits

But try https://raw.githubusercontent.com/cheat-engine/cheat-engine/master/Cheat%20Engine/bin/autorun/monoscript.lua
it shouldn't disconnect that quickly (Just not show any symbols when debugging, and IF the mono dll is the one triggering the BP, still disconnect)

_________________
Do not ask me about online cheats. I don't know any and wont help finding them.

Like my help? Join me on Patreon so i can keep helping
Back to top
View user's profile Send private message MSN Messenger
fakerlol
Newbie cheater
Reputation: 0

Joined: 06 Feb 2016
Posts: 21

PostPosted: Wed Nov 25, 2020 4:12 pm    Post subject: Reply with quote

Dark Byte wrote:
When you look at an address, CE will ask the mono process what the name of that address is
If it takes longer than 3 seconds, ce will disconnect from the mono system to prevent a full freeze

When a breakpoint hits, CE also asks that mono process what the name is, but since the target process is frozen, it will not respond, so therefore it will disconnect.

In the previous version where CE didn't disconnect, CE would try not show any symbols at all if any breakpoint is set or the target is halted on a breakpoint, but since sometimes a breakpoint hits because the address is fetched, that would cause CE to freeze infinitely, so I went for a timeout system instead.
At least this way you don't have to restart CE when a breakpoint hits

But try https://raw.githubusercontent.com/cheat-engine/cheat-engine/master/Cheat%20Engine/bin/autorun/monoscript.lua
it shouldn't disconnect that quickly (Just not show any symbols when debugging, and IF the mono dll is the one triggering the BP, still disconnect)

Using the monoscript.lua in your link leads to no symbols shown at all (even though I can use symbols to jump into a method for example).
So while I can debug using mono features, I can't see any symbols in the memory window, which is a real bummer.

I don't quite understand why this is a problem in the first place: I can remember that for the longest time, I was able to use Mono features while stepping through my code. Then it started to get buggy for some of the minor versions with 6.x and with the major version 7.x I wasn't able to use it while debugging at all.
Especially when I want to dissect a structure using an adress fetched from a register, the mono features came in handy.
Now, I need to set a breakpoint to some line of code where the needed adress is calculated already, remove the breakpoint and use the adress in the dissect window - all while hoping that continuing to that breakpoint doesn't deactive mono features.

Is this the desired workflow with mono-executables or am I just doing something wrong?
Back to top
View user's profile Send private message
Dark Byte
Site Admin
Reputation: 471

Joined: 09 May 2003
Posts: 25831
Location: The netherlands

PostPosted: Wed Nov 25, 2020 4:58 pm    Post subject: Reply with quote

Sorry, that script had a typo. Try again

the 6.x versions would never show symbols, and even then still sometimes end in a complete lockout of CE as it would freeze if a breakpoint did happen. If it worked, it'd likely be .net or a .PDB with data, but not mono

You just need to understand that it's literally impossible to query mono routines while the target is suspended. Maybe in some rare cases where you use VEH debug and the collector thread is not suspended it may work, but modern versions of mono are more thread safe and will apply locks to certain structures, so asking for a name for an address will cause mono to acquire an method lock, which will then have to wait for the current mono method to finish executing, so infinite lock if that method is the one currently halted on a breakpoint and that address's name is being queried

_________________
Do not ask me about online cheats. I don't know any and wont help finding them.

Like my help? Join me on Patreon so i can keep helping
Back to top
View user's profile Send private message MSN Messenger
fakerlol
Newbie cheater
Reputation: 0

Joined: 06 Feb 2016
Posts: 21

PostPosted: Wed Nov 25, 2020 5:37 pm    Post subject: Reply with quote

Damn, now that you mention it, I had .pdb's or native .net applications when using the debugger, so it seemed to work flawlessly.
Seems that I confused .net with mono, so your explanation does make a lot of sense.

Yeah, back to learning more about the backend I guess.
Thanks for your fast replies DB!
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Cheat Engine Forum Index -> Cheat Engine All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


Powered by phpBB © 2001, 2005 phpBB Group

CE Wiki   IRC (#CEF)   Twitter
Third party websites