Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ISIL to CIL Conversion #223

Open
ds5678 opened this issue Jun 22, 2023 · 10 comments
Open

ISIL to CIL Conversion #223

ds5678 opened this issue Jun 22, 2023 · 10 comments

Comments

@ds5678
Copy link
Contributor

ds5678 commented Jun 22, 2023

Context

Currently, the development branch only supporting empty method filling, whilst the legacy branch supports some platform-specific method body recovery.

Motivation for posting this issue

I needed a good place to point people who ask about it in the AssetRipper community. Do not interpret this as a request from me to do any work.

ISIL

ISIL (instruction set independent language) is a custom framework on the development branch designed to abstract over differences between game platforms.

Challenges

Porting the method body conversion is far from a simple copy-paste:

  • ISIL didn't exist in legacy code, so legacy code was platform specific.
  • ISIL is not fully implemented.
  • The development branch uses AsmResolver for assembly creation, but legacy code used Mono.Cecil.

This is a massive feature, so users should either be patient or give @SamboyCoding lots of money.

Workaround for impatient users

It's amazing that Cpp2IL supported method body recovery at one point. Hopefully, it will again someday, but there's no timescale on that implementation.

Legacy releases are the only releases that support method body recovery. They have names of the form 2022.0.X where X is any number from 0 to infinity.

  1. Download the appropriate file for your operating system.
  2. Extract the contents to a new folder.
  3. Open a command prompt or terminal.
  4. Use cd path/to/Cpp2IL.exe
  5. Use appropriate command line options. You'll likely want --just-give-me-dlls-asap-dammit to be one of the arguments.
  6. Load the Cpp2IL output into ILSpy.
  7. If desirable, ILSpy supports saving decompiled text files to the disk.
@Mustafa-Agha
Copy link

@ds5678 The workaround still gives me empty methods

@ds5678
Copy link
Contributor Author

ds5678 commented Jun 22, 2023

@Mustafa-Agha legacy support might not have included your platform. In that case, empty methods would be expected.

@JeanTheFungle

This comment was marked as off-topic.

@JeanTheFungle

This comment was marked as off-topic.

@JeanTheFungle

This comment was marked as off-topic.

@ds5678
Copy link
Contributor Author

ds5678 commented Aug 19, 2023

@JeanAU You are not entitled to an answer, especially after your rude question (when this issue will be fixed).

What do you mean "legacy suport might not included in your platfrom" ?

That is not what I said. What I said means:

The legacy branch of Cpp2IL, which could recover CIL instructions for some CPU architectures and some game platforms, might not have supported CIL recovery on the specific architecture or platform of that particular game, even if it could do basic recovery.

@ds5678
Copy link
Contributor Author

ds5678 commented Aug 19, 2023

@ds5678
Copy link
Contributor Author

ds5678 commented Aug 19, 2023

Now be patient or put your wallet where your mouth is. What you want might never come without financial incentive.

@JeanTheFungle

This comment was marked as off-topic.

@JeanTheFungle

This comment was marked as off-topic.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants