Skip to content

Conversation

CarrBen
Copy link
Owner

@CarrBen CarrBen commented Mar 2, 2025

DRAFT: This is stacked on top of zrax#538 as both include changes to the same opcode

Some changes for the handling of MAKE_FUNCTION operand & arguments in py3.6-3.12 that I discovered while make some fixes to decompile a py 3.11 app. I started on this before I noticed that zrax#391 existed, but as this PR is stacked on top of zrax#538 it works for py 3.0 & py 3.4 too.

MAKE_FUNCTION Python 3.4 Docs
MAKE_FUNCTION Python 3.7 Docs

Summary

Tests

The test_functions_py3 for py 3.7 was in xfail.
In the previous PR, I added a new test case and updated the tokenized version, to match this the test_functions_py3.3.7.pyc file in compiled was re-built from the (previously updated) source in input.
I used the token_dump and pymultic scripts for this, with a slight modification to use -alpine containers in pymultic.

New py3.6-12 Arg Defaults for MAKE_FUNCTION

With the current master, pycdc produced this output for the x7d test case on py3.7.

def x7d(foo = None, *, bar, **kwargs):

However, this is the input

def x7d(foo = 1, *, bar = 2, **kwargs):

This is because the MAKE_FUNCTION code expects individual args on the stack, but they are now on the stack inside of 0-4 tuples & kwargs indicated by the operand flag.

Stacked on top of zrax#538

@CarrBen CarrBen merged commit 6c55280 into bentigration Mar 20, 2025
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

Successfully merging this pull request may close these issues.

1 participant