XenonRecomp
XenonRecomp copied to clipboard
How do i find the longjmp & setjmp?
hit your G key and look for RtlUnwind, if it doesnt find it you dont need it if it does it and the one after it are the longjmp and setjmp this is said in the readme.md, i highly reccomend looking at it
hit your G key and look for RtlUnwind, if it doesnt find it you dont need it if it does it and the one after it are the longjmp and setjmp this is said in the readme.md, i highly reccomend looking at it
sadly it's written poorly sure it explains that but images and more could help and more detail.
i dont really understand it yet, is this correct?
i dont really understand it yet, is this correct?
that should be yeah
i dont really understand it yet, is this correct?
that should be yeah
sadly not it's __imp__KeBugCheck(ctx, base);
Here are some byte patterns if it helps, search for them and see what you find:
longjmp:
80 67 01 34 80 87 00 90 48 00 CC 19 C9 C7 00 00
C9 E7 00 08 CA 07 00 10 CA 27 00 18 CA 47 00 20
CA 67 00 28 CA 87 00 30 CA A7 00 38 CA C7 00 40
CA E7 00 48 CB 07 00 50 CB 27 00 58 CB 47 00 60
CB 67 00 68 CB 87 00 70 CB A7 00 78 CB C7 00 80
CB E7 00 88 E9 A7 00 98 E9 C7 00 A0 E9 E7 00 A8
EA 07 00 B0 EA 27 00 B8 EA 47 00 C0 EA 67 00 C8
EA 87 00 D0 EA A7 00 D8 EA C7 00 E0 EA E7 00 E8
EB 07 00 F0 EB 27 00 F8 EB 47 01 00 EB 67 01 08
EB 87 01 10 EB A7 01 18 EB C7 01 20 EB E7 01 28
38 60 01 40 10 03 38 CB 38 60 01 50 10 23 38 CB
38 60 01 60 10 43 38 CB 38 60 01 70 10 63 38 CB
38 60 01 80 10 83 38 CB 38 60 01 90 10 A3 38 CB
38 60 01 A0 10 C3 38 CB 38 60 01 B0 10 E3 38 CB
38 60 01 C0 11 03 38 CB 38 60 01 D0 11 23 38 CB
38 60 01 E0 11 43 38 CB 38 60 01 F0 11 63 38 CB
38 60 02 00 11 83 38 CB 38 60 02 10 11 A3 38 CB
38 60 02 20 11 C3 38 CB 38 60 02 30 11 E3 38 CB
38 60 02 40 12 03 38 CB 38 60 02 50 12 23 38 CB
38 60 02 60 12 43 38 CB 38 60 02 70 12 63 38 CB
setjmp:
DA 63 00 28 DA 83 00 30 DA A3 00 38 DA C3 00 40
DA E3 00 48 DB 03 00 50 DB 23 00 58 DB 43 00 60
DB 63 00 68 DB 83 00 70 DB A3 00 78 DB C3 00 80
DB E3 00 88 F9 A3 00 98 F9 C3 00 A0 F9 E3 00 A8
FA 03 00 B0 FA 23 00 B8 FA 43 00 C0 FA 63 00 C8
FA 83 00 D0 FA A3 00 D8 FA C3 00 E0 FA E3 00 E8
FB 03 00 F0 FB 23 00 F8 FB 43 01 00 FB 63 01 08
FB 83 01 10 FB A3 01 18 FB C3 01 20 FB E3 01 28
38 A0 01 40 10 05 1D 0B 38 A0 01 50 10 25 1D 0B
38 A0 01 60 10 45 1D 0B 38 A0 01 70 10 65 1D 0B
38 A0 01 80 10 85 1D 0B 38 A0 01 90 10 A5 1D 0B
38 A0 01 A0 10 C5 1D 0B 38 A0 01 B0 10 E5 1D 0B
38 A0 01 C0 11 05 1D 0B 38 A0 01 D0 11 25 1D 0B
38 A0 01 E0 11 45 1D 0B 38 A0 01 F0 11 65 1D 0B
38 A0 02 00 11 85 1D 0B 38 A0 02 10 11 A5 1D 0B
38 A0 02 20 11 C5 1D 0B 38 A0 02 30 11 E5 1D 0B
38 A0 02 40 12 05 1D 0B 38 A0 02 50 12 25 1D 0B
38 A0 02 60 12 45 1D 0B 38 A0 02 70 12 65 1D 0B
38 A0 02 80 12 85 1D 0B 38 A0 02 90 12 A5 1D 0B
38 A0 02 A0 12 C5 1D 0B 38 A0 02 B0 12 E5 1D 0B
Take in mind these don't have to exist in games. Sonic Unleashed had them because the Lua library they used was a pure C library and used these functions to do error handling.
Here are some byte patterns if it helps, search for them and see what you find:
longjmp:
80 67 01 34 80 87 00 90 48 00 CC 19 C9 C7 00 00 C9 E7 00 08 CA 07 00 10 CA 27 00 18 CA 47 00 20 CA 67 00 28 CA 87 00 30 CA A7 00 38 CA C7 00 40 CA E7 00 48 CB 07 00 50 CB 27 00 58 CB 47 00 60 CB 67 00 68 CB 87 00 70 CB A7 00 78 CB C7 00 80 CB E7 00 88 E9 A7 00 98 E9 C7 00 A0 E9 E7 00 A8 EA 07 00 B0 EA 27 00 B8 EA 47 00 C0 EA 67 00 C8 EA 87 00 D0 EA A7 00 D8 EA C7 00 E0 EA E7 00 E8 EB 07 00 F0 EB 27 00 F8 EB 47 01 00 EB 67 01 08 EB 87 01 10 EB A7 01 18 EB C7 01 20 EB E7 01 28 38 60 01 40 10 03 38 CB 38 60 01 50 10 23 38 CB 38 60 01 60 10 43 38 CB 38 60 01 70 10 63 38 CB 38 60 01 80 10 83 38 CB 38 60 01 90 10 A3 38 CB 38 60 01 A0 10 C3 38 CB 38 60 01 B0 10 E3 38 CB 38 60 01 C0 11 03 38 CB 38 60 01 D0 11 23 38 CB 38 60 01 E0 11 43 38 CB 38 60 01 F0 11 63 38 CB 38 60 02 00 11 83 38 CB 38 60 02 10 11 A3 38 CB 38 60 02 20 11 C3 38 CB 38 60 02 30 11 E3 38 CB 38 60 02 40 12 03 38 CB 38 60 02 50 12 23 38 CB 38 60 02 60 12 43 38 CB 38 60 02 70 12 63 38 CBsetjmp:
DA 63 00 28 DA 83 00 30 DA A3 00 38 DA C3 00 40 DA E3 00 48 DB 03 00 50 DB 23 00 58 DB 43 00 60 DB 63 00 68 DB 83 00 70 DB A3 00 78 DB C3 00 80 DB E3 00 88 F9 A3 00 98 F9 C3 00 A0 F9 E3 00 A8 FA 03 00 B0 FA 23 00 B8 FA 43 00 C0 FA 63 00 C8 FA 83 00 D0 FA A3 00 D8 FA C3 00 E0 FA E3 00 E8 FB 03 00 F0 FB 23 00 F8 FB 43 01 00 FB 63 01 08 FB 83 01 10 FB A3 01 18 FB C3 01 20 FB E3 01 28 38 A0 01 40 10 05 1D 0B 38 A0 01 50 10 25 1D 0B 38 A0 01 60 10 45 1D 0B 38 A0 01 70 10 65 1D 0B 38 A0 01 80 10 85 1D 0B 38 A0 01 90 10 A5 1D 0B 38 A0 01 A0 10 C5 1D 0B 38 A0 01 B0 10 E5 1D 0B 38 A0 01 C0 11 05 1D 0B 38 A0 01 D0 11 25 1D 0B 38 A0 01 E0 11 45 1D 0B 38 A0 01 F0 11 65 1D 0B 38 A0 02 00 11 85 1D 0B 38 A0 02 10 11 A5 1D 0B 38 A0 02 20 11 C5 1D 0B 38 A0 02 30 11 E5 1D 0B 38 A0 02 40 12 05 1D 0B 38 A0 02 50 12 25 1D 0B 38 A0 02 60 12 45 1D 0B 38 A0 02 70 12 65 1D 0B 38 A0 02 80 12 85 1D 0B 38 A0 02 90 12 A5 1D 0B 38 A0 02 A0 12 C5 1D 0B 38 A0 02 B0 12 E5 1D 0BTake in mind these don't have to exist in games. Sonic Unleashed had them because the Lua library they used was a pure C library and used these functions to do error handling.
Fable 2 also uses pure c and lua and i found both long and set already
longjmp_address = 0x832B25CC
setjmp_address = 0x82CAF478
also found
restgprlr_14_address = 0x82CA2C00
savegprlr_14_address = 0x82CA2BB0
restfpr_14_address = 0x82CA751C
savefpr_14_address = 0x82CA74D0
restvmx_14_address = 0x82FFFF68
savevmx_14_address = 0x82FFFCD0
restvmx_64_address = 0x82FFFFFC
savevmx_64_address = 0x82FFFD64
and
functions = [
{ address = 0x831FBB90, size = 0x198 },
{ address = 0x8241BAA8, size = 0x11C },
{ address = 0x824B7E70, size = 0x68 },
{ address = 0x823A5A28, size = 0x124 },
{ address = 0x8222B3C8, size = 0xF4 },
{ address = 0x822D7EA0, size = 0xE8 },
{ address = 0x8242C5E0, size = 0x88 },
{ address = 0x8283FF98, size = 0xCC },
{ address = 0x82A2F3E8, size = 0x114 },
{ address = 0x8289FB40, size = 0x2C8 },
{ address = 0x82520C00, size = 0x6C },
{ address = 0x82415A20, size = 0x1B8 },
{ address = 0x82FE7850, size = 0x108 },
{ address = 0x82BE9680, size = 0xBEC },
{ address = 0x82D9E9F0, size = 0x78 },
{ address = 0x82C56828, size = 0x78 },
{ address = 0x822A2AB0, size = 0xEC },
{ address = 0x824CAC90, size = 0x158 },
{ address = 0x8217F250, size = 0xF0 },
{ address = 0x83046BE8, size = 0x114 },
{ address = 0x82D9E998, size = 0x54 },
{ address = 0x82B8F5E8, size = 0x128 },
{ address = 0x82E33B90, size = 0xB4 },
{ address = 0x824D2800, size = 0x7C },
{ address = 0x8259AF48, size = 0x7C },
{ address = 0x82A34680, size = 0x480 },
{ address = 0x82C9E878, size = 0x244 },
{ address = 0x82C89840, size = 0x1D8 },
{ address = 0x822D7DF8, size = 0xA4 },
{ address = 0x82C9A118, size = 0x244 },
{ address = 0x82D97090, size = 0x3FC },
{ address = 0x82C99CB8, size = 0x214 },
{ address = 0x82592C80, size = 0x84 },
{ address = 0x82C99ED0, size = 0x244 },
{ address = 0x82B809E8, size = 0x22C },
{ address = 0x822EAA98, size = 0x94 },
{ address = 0x82CA1E98, size = 0x1BC },
{ address = 0x826224B8, size = 0xAC },
{ address = 0x8272B2C0, size = 0x168 },
{ address = 0x82BC9B28, size = 0x128 },
{ address = 0x82B57148, size = 0x2E0 },
{ address = 0x82C97120, size = 0x94 },
{ address = 0x82D82B48, size = 0x19C },
{ address = 0x831FBAC8, size = 0x64 },
{ address = 0x822D7CB0, size = 0x74 },
{ address = 0x82BE0100, size = 0xA4 },
{ address = 0x8283A008, size = 0x84 },
{ address = 0x82C8D3F0, size = 0x314 },
{ address = 0x82C9DA98, size = 0x198 },
{ address = 0x82DE6750, size = 0xF4 },
{ address = 0x82771250, size = 0xA0 },
{ address = 0x822D7D58, size = 0x9C },
{ address = 0x82CA1A00, size = 0x114 },
{ address = 0x82622360, size = 0xC0 },
{ address = 0x82C8DAE8, size = 0xF8 },
{ address = 0x82C8C9F0, size = 0x150 },
{ address = 0x831B31B8, size = 0x78 },
{ address = 0x82B38270, size = 0x110 },
{ address = 0x82DE4C10, size = 0x1E8 },
{ address = 0x83095890, size = 0x110 },
{ address = 0x8299F668, size = 0x90 },
{ address = 0x827D30C0, size = 0x2E0 },
{ address = 0x824BDE60, size = 0xA8 },
{ address = 0x824063B0, size = 0xF0 },
{ address = 0x831FBB30, size = 0x5C },
{ address = 0x82BC8260, size = 0x7C },
{ address = 0x822E2304, size = 0x15D4 },
{ address = 0x82B8D010, size = 0xF8C },
{ address = 0x8310FC68, size = 0x80 },
{ address = 0x82DA60B0, size = 0x31C },
{ address = 0x82E0F3A8, size = 0xCC },
{ address = 0x822D7C50, size = 0x5C },
{ address = 0x82522E18, size = 0x174 },
{ address = 0x82C9D280, size = 0x198 },
{ address = 0x831FBA60, size = 0x68 },
{ address = 0x825A0B58, size = 0x90 },
{ address = 0x82C8D708, size = 0x190 },
{ address = 0x82C8CF00, size = 0x100 },
{ address = 0x82C9B420, size = 0x274 },
{ address = 0x8250B778, size = 0x58 },
{ address = 0x82DDC208, size = 0x24C },
{ address = 0x831FBD28, size = 0x16C },
{ address = 0x82D7F5B0, size = 0x154 }
]
invalid_instructions = [
{ data = 0x00000000, size = 4 }, # Padding
{ data = 0x832B25AC, size = 8 }, # C Specific Frame Handler
{ data = 0x831C8B50, size = 8 },
{ data = 0x832B34C4, size = 64 } # End of .text
Fable 2 also uses pure c and lua and i found both long and set already
longjmp_address = 0x832B25CC setjmp_address = 0x82CAF478also found
restgprlr_14_address = 0x82CA2C00and
functions = [ { address = 0x831FBB90, size = 0x198 }, { address = 0x831FBD28, size = 0x16C }, { address = 0x82D7F5B0, size = 0x154 } ]invalid_instructions = [ { data = 0x00000000, size = 4 }, # Padding { data = 0x832B25AC, size = 8 }, # C Specific Frame Handler { data = 0x831C8B50, size = 8 }, { data = 0x832B34C4, size = 64 } # End of .text
I found longjmp_address and setjmp_address by performing a hex search using the sample provided here. But how did you find all those other addresses?
Fable 2 also uses pure c and lua and i found both long and set already
longjmp_address = 0x832B25CC setjmp_address = 0x82CAF478also found
restgprlr_14_address = 0x82CA2C00and
functions = [ { address = 0x831FBB90, size = 0x198 }, { address = 0x831FBD28, size = 0x16C }, { address = 0x82D7F5B0, size = 0x154 } ]invalid_instructions = [ { data = 0x00000000, size = 4 }, # Padding { data = 0x832B25AC, size = 8 }, # C Specific Frame Handler { data = 0x831C8B50, size = 8 }, { data = 0x832B34C4, size = 64 } # End of .textI found longjmp_address and setjmp_address by performing a hex search using the sample provided here. But how did you find all those other addresses?
python script in pull requests also can you share the setjmp you found and longjmp i used the fable 2 GOTY so i didn't need updates or dlc added
Fable 2 also uses pure c and lua and i found both long and set already
longjmp_address = 0x832B25CC setjmp_address = 0x82CAF478also found
restgprlr_14_address = 0x82CA2C00and
functions = [ { address = 0x831FBB90, size = 0x198 }, { address = 0x831FBD28, size = 0x16C }, { address = 0x82D7F5B0, size = 0x154 } ]invalid_instructions = [ { data = 0x00000000, size = 4 }, # Padding { data = 0x832B25AC, size = 8 }, # C Specific Frame Handler { data = 0x831C8B50, size = 8 }, { data = 0x832B34C4, size = 64 } # End of .textI found longjmp_address and setjmp_address by performing a hex search using the sample provided here. But how did you find all those other addresses?
python script in pull requests also can you share the setjmp you found and longjmp i used the fable 2 GOTY so i didn't need updates or dlc added
The game I'm trying to recompile is Vigilante 8 Arcade. longjmp_address = 0x823164b0 setjmp_address = 0x823167d0
Using sonic unleashed function signatures, i've generated some bytes that can help find longjmp and setjmp faster. I've currently tested this on GTAV, GTAIV and WATCH DOGS and it found them 2 out of 3 times.
longjmp_address = 7C 08 02 A6 94 21 setjmp_address = 3C 80 ? ? 80 04
Paste the signature here and mark "Find all ocurrences". There should be one or none results each.