More actions
No edit summary |
m (Text replacement - "Category:Homebrew hack utility for 3DS games" to "") |
||
(13 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
{{Infobox 3DS Homebrews | {{Infobox 3DS Homebrews | ||
|title=Magikoopa | |title=Magikoopa | ||
|image= | |image=Magikoopa4.png | ||
|description=Code patcher for 3ds games. | |description=Code patcher for 3ds games. | ||
|author=RicBent | |author=RicBent | ||
|lastupdated=2019/06/29 | |lastupdated=2019/06/29 | ||
|type=Utilities | |type=Hack Utilities | ||
|version=2019 | |version=2019 | ||
|license= | |license=GPL-3.0 | ||
|download=https://dlhb.gamebrew.org/ | |download=https://dlhb.gamebrew.org/3dshomebrews/magikoopa.7z?k33p0fil35 | ||
|website=https://github.com/RicBent/Magikoopa | |website=https://github.com/RicBent/Magikoopa | ||
|source=https://github.com/RicBent/Magikoopa | |source=https://github.com/RicBent/Magikoopa | ||
Line 21: | Line 21: | ||
==User guide== | ==User guide== | ||
=== Getting started === | === Getting started === | ||
* Build the project in QtCreator. | * Build the project in QtCreator. | ||
* Run <code>Magikoopa</code> in the build directory. | * Run <code>Magikoopa</code> in the build directory. | ||
You can find examples on how to use Magikoopa in combination with NSMB2 [https://github.com/RicBent/Magikoopa-NSMB2-Examples here]. | |||
===Hooks=== | ===Hooks=== | ||
Line 36: | Line 36: | ||
hook_name_2: | hook_name_2: | ||
... | ... | ||
There are several types of hooks. | There are several types of hooks. | ||
{| class="wikitable" | {| class="wikitable" style="width: 800px;" | ||
|- | |- | ||
! style="width: 10%;"|Type | ! style="width: 10%;"|Type | ||
Line 55: | Line 54: | ||
The following parameters are common to all hook types: | The following parameters are common to all hook types: | ||
{|class="wikitable" | {|class="wikitable" style="width: 800px;" | ||
|- | |- | ||
! style="width: 10%;"|Parameter | ! style="width: 10%;"|Parameter | ||
Line 65: | Line 64: | ||
===Branch hooks=== | ===Branch hooks=== | ||
{|class="wikitable" | {|class="wikitable" style="width: 800px;" | ||
|- | |- | ||
! style="width: 10%;"|Parameter | ! style="width: 10%;"|Parameter | ||
Line 84: | Line 83: | ||
===Soft-branch hooks=== | ===Soft-branch hooks=== | ||
{|class="wikitable" | {|class="wikitable" style="width: 800px;" | ||
|- | |- | ||
! style="width: 10%;"|Parameter | ! style="width: 10%;"|Parameter | ||
Line 103: | Line 102: | ||
===Patch hooks=== | ===Patch hooks=== | ||
{|class="wikitable" | {|class="wikitable" style="width: 800px;" | ||
|- | |- | ||
! style="width: 10%;"|Parameter | ! style="width: 10%;"|Parameter | ||
Line 120: | Line 119: | ||
data, or both src and len, are required parameters. | data, or both src and len, are required parameters. | ||
==Screenshots== | |||
https://dlhb.gamebrew.org/3dshomebrews/magikoopa3.png | |||
==Credits== | ==Credits== | ||
Line 126: | Line 128: | ||
* StapleButter - Partial coding of the Filesystem classes. | * StapleButter - Partial coding of the Filesystem classes. | ||
* Icons8 - Icons ([https://icons8.com https://icons8.com]). | * Icons8 - Icons ([https://icons8.com https://icons8.com]). | ||
==External links== | |||
* GitHub (Magikoopa) - https://github.com/RicBent/Magikoopa | |||
* GitHub (Magikoopa-Examples) - https://github.com/RicBent/Magikoopa-NSMB2-Examples | |||
* Reddit - https://www.reddit.com/r/3dshacks/comments/78bokx/magikoopa_code_patcher_for_3ds_games | |||
* Kuribo64 - http://kuribo64.net/board/thread.php?id=3423 |
Latest revision as of 04:15, 6 Mayıs 2024
Magikoopa | |
---|---|
General | |
Author | RicBent |
Type | Hack Utilities |
Version | 2019 |
License | GPL-3.0 |
Last Updated | 2019/06/29 |
Links | |
Download | |
Website | |
Source | |
Magikoopa is a homebrew tool aimed at rom hackers or people who want to modify the code of an existing applicaiton.
Because of memory segmentation it is not easy to add as much code to code.bin files as we want. To allow that we insert a small loader into the padding between the executable and data section that reprotects memory to our needs to mark perviously read-write only memory as executable.
Magikoopa compiles code for 3DS games and injects it into existing code.bin files and also patches the exheader.bin file. Furthermore it allows creating hooks from existing code into custom code. It features a nice UI that displays anything that can go wrong during the compiling and inserting steps.
It even allows you to jump directly to issues in code/hooks my clicking on the issues displayed in the UI. The motivation for this is to create a NSMB2 hack with fully custom code. In theory this should work with all other games as well tho. Work in progress. Should be in a kinda working state now.
User guide
Getting started
- Build the project in QtCreator.
- Run
Magikoopa
in the build directory.
You can find examples on how to use Magikoopa in combination with NSMB2 here.
Hooks
Hooks can be specified with hks files in a patch's working directory. The format is similar to YAML:
hook_name_1: type: xxx link: false addr: 0x00430988 func: FunctionNameHere hook_name_2: ...
There are several types of hooks.
Type | Description |
---|---|
branch | Branch to a function (overwrites the original instruction). |
softbranch | Branch to a function (preserves the original instruction). |
patch | Patch data at an offset. |
symbol | Write the address of a symbol. |
The following parameters are common to all hook types:
Parameter | Description |
---|---|
addr | Hook address. |
Branch hooks
Parameter | Description |
---|---|
link | true to make a BL instruction, false for B.
|
func | (1) Branch destination function name. This will be converted to an address using the symbol table. |
dest | (2) Branch destination address. |
Link and one of func and dest are required parameters.
Soft-branch hooks
Parameter | Description |
---|---|
func | (1) Branch destination function name. This will be converted to an address using the symbol table. |
dest | (2) Branch destination address. |
opcode | "pre" (branch to func/dest after the original instruction), "post" (branch before the original instruction) or "ignore" (default). |
One of func and dest are required parameters.
Patch hooks
Parameter | Description |
---|---|
data | (1) Data to insert (in hexadecimal). |
src | (2) Symbol name of data to insert. |
len | (2) Length of data to insert. |
data, or both src and len, are required parameters.
Screenshots
Credits
Thanks to:
- Dirbaio - Creator of the NSMBDS asm patch template which was used as a basis.
- StapleButter - Partial coding of the Filesystem classes.
- Icons8 - Icons (https://icons8.com).
External links
- GitHub (Magikoopa) - https://github.com/RicBent/Magikoopa
- GitHub (Magikoopa-Examples) - https://github.com/RicBent/Magikoopa-NSMB2-Examples
- Reddit - https://www.reddit.com/r/3dshacks/comments/78bokx/magikoopa_code_patcher_for_3ds_games
- Kuribo64 - http://kuribo64.net/board/thread.php?id=3423