Skip to content

Latest commit

 

History

History
66 lines (45 loc) · 1.89 KB

README.md

File metadata and controls

66 lines (45 loc) · 1.89 KB

pengu-rust

Challenge of implementing Pengu Core in Rust 🦀

The choice of programming language for a core library is a matter of preference and practicality. The key is to leverage the language's strengths to create a robust, efficient, and maintainable library that seamlessly integrates into the application's ecosystem.


Why Rust?

  • UTF-8 strings
  • Filesystem support
  • C++ FFI & bindgen
  • Mono codebase for cross-platform

Achievements

  • Bootstrapper
    • IFEO mode
    • Symlink mode
  • Handmade hooks
  • Plugin assets
  • Custom imports
  • Preload scripts
  • Basic user plugins
  • Cross-platform
    • Windows
    • macOS

Development

Your pull-requests are welcome!

Refer to Pengu Loader source code.

Rust Bindgen is a good thing to generate bindings from C++ headers, see the build.rs.

A new Pengu docs will release soon to help you to understand the architecture and how it works.

Building

cargo build

To build in production mode, just add --release to the command above.

Installing

After your successful build, you will see the core.dll in the folder target/debug or target/release according to your build mode above. This DLL is compatible with the current Pengu Loader app, so you just replace it in the app folder.

If you prefer to manual install using IFEO method, run this command in elevated cmd.

set "dval=rundll32 \"path\to\core.dll\", #6000"
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\LeagueClientUx.exe" /v Debugger /t REG_SZ "%dval%"

Debugging

Use lldb or VSCode extension to attach to the running LeagueClientUx.exe or LeagueClientUxRenderer.exe.