XenonRecomp icon indicating copy to clipboard operation
XenonRecomp copied to clipboard

How do i find the longjmp & setjmp?

Open magnetic1192 opened this issue 9 months ago • 11 comments

Image

magnetic1192 avatar Mar 10 '25 05:03 magnetic1192

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

masterspike52 avatar Mar 10 '25 21:03 masterspike52

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.

ryzendew avatar Mar 10 '25 21:03 ryzendew

i dont really understand it yet, is this correct? Image

gamerbross avatar Mar 10 '25 23:03 gamerbross

i dont really understand it yet, is this correct? Image

that should be yeah

masterspike52 avatar Mar 11 '25 00:03 masterspike52

i dont really understand it yet, is this correct? Image

that should be yeah

sadly not it's __imp__KeBugCheck(ctx, base);

ryzendew avatar Mar 11 '25 02:03 ryzendew

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.

blueskythlikesclouds avatar Mar 12 '25 14:03 blueskythlikesclouds

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.

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

ryzendew avatar Mar 12 '25 17:03 ryzendew

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	

and

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?

ImanCol avatar Mar 12 '25 18:03 ImanCol

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	

and

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?

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

ryzendew avatar Mar 12 '25 21:03 ryzendew

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	

and

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?

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

ImanCol avatar Mar 14 '25 22:03 ImanCol

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. Image

YoshiCrystal9 avatar Nov 10 '25 13:11 YoshiCrystal9