rocky/python-xasm

Error in python 3.8.3 ,how to fix?

Datez-Kun opened this issue · 2 comments

why do i get an error like this when trying it in python 3.8.3? Is this a bug? The following is the error code

$ pydisasm --version
pydisasm, version 4.6.1

$ pydisasm --asm tes.pyc
# pydisasm version 4.6.1
# Python bytecode 3.8 (3413)
# Disassembled from Python 3.8.3 (default, May 14 2020, 14:40:57)
# [Clang 8.0.7 (https://android.googlesource.com/toolchain/clang b55f2d4ebfd35bf6
# Timestamp in code: 1591520548 (2020-06-07 16:02:28)
# Source code size mod 2**32: 101 bytes

# Method Name:       helo
# Filename:          tes.py
# Argument count:    1
# Position-only argument count: 0
# Keyword-only arguments: 0
# Number of locals:  1
# Stack size:        6
# Flags:             0x00000043 (NOFREE | NEWLOCALS | OPTIMIZED)
# First Line:        1
# Constants:
#    0: None
# Names:
#    0: print
# Varnames:
#       teks
# Positional arguments:
#       teks
  2:
            SETUP_FINALLY        L14 (to 14)

  3:
            LOAD_GLOBAL          (print)
            LOAD_FAST            (teks)
            CALL_FUNCTION        1
            POP_TOP
            POP_BLOCK
            JUMP_FORWARD         L26 (to 26)

L14:
   4:
            POP_TOP
            POP_TOP
            POP_TOP

  5:
            POP_EXCEPT
            JUMP_FORWARD         L26 (to 26)
            END_FINALLY
L26:
            LOAD_CONST           (None)
            RETURN_VALUE


# Method Name:       <module>
# Filename:          tes.py
# Argument count:    0
# Position-only argument count: 0
# Keyword-only arguments: 0
# Number of locals:  0
# Stack size:        2
# Flags:             0x00000040 (NOFREE)
# First Line:        1
# Constants:
#    0: <Code38 code object helo at 0xae631688, file tes.py>, line 1
#    1: 'helo'
#    2: '__main__'
#    3: 'Hello ,World!'
#    4: None
# Names:
#    0: helo
#    1: __name__
  1:
            LOAD_CONST           0 (<Code38 code object helo at 0xae631688, file tes.py>, line 1)
            LOAD_CONST           ('helo')
            MAKE_FUNCTION        0 (Neither defaults, keyword-only args, annotations, nor closures)
            STORE_NAME           (helo)

  7:
            LOAD_NAME            (__name__)
            LOAD_CONST           ('__main__')
            COMPARE_OP           (==)
            POP_JUMP_IF_FALSE    L24 (to 24)

  8:
            LOAD_NAME            (helo)
            LOAD_CONST           3 ('Hello ,World!')
            CALL_FUNCTION        1
            POP_TOP
L24:
            LOAD_CONST           (None)
            RETURN_VALUE

then I save it in the test.pyasm file
and when i run python xasm an error pops up like this

$ pyc-xasm tes.pyasm
Traceback (most recent call last):
  File "/data/data/com.termux/files/usr/bin/pyc-xasm", line 11, in <module>
    load_entry_point('xasm==1.1.0', 'console_scripts', 'pyc-xasm')()
  File "/data/data/com.termux/files/usr/lib/python3.8/site-packages/click/core.py", line 764, in __call__
    return self.main(*args, **kwargs)
  File "/data/data/com.termux/files/usr/lib/python3.8/site-packages/click/core.py", line 717, in main
    rv = self.invoke(ctx)
  File "/data/data/com.termux/files/usr/lib/python3.8/site-packages/click/core.py", line 956, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/data/data/com.termux/files/usr/lib/python3.8/site-packages/click/core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "/data/data/com.termux/files/usr/lib/python3.8/site-packages/xasm/xasm_cli.py", line 28, in main
    asm = asm_file(asm_path)
  File "/data/data/com.termux/files/usr/lib/python3.8/site-packages/xasm/assemble.py", line 124, in asm_file
    asm = Assembler(python_version)
  File "/data/data/com.termux/files/usr/lib/python3.8/site-packages/xasm/assemble.py", line 52, in __init__
    self.opc = get_opcode(python_version)
TypeError: get_opcode() missing 1 required positional argument: 'is_pypy'

it looks like the real error is in the main.py file in the xdis package in this get_opcode function

def get_opcode(version, is_pypy):
 49     # Set up disassembler with the right opcodes
 50     if type(version) in (list, tuple):
 51         version = ".".join([str(x) for x in version])
 52     lookup = str(version)
 53     if is_pypy:
 54         lookup += "pypy"
 55     if lookup in op_imports.keys():
 56         return op_imports[lookup]
 57     if is_pypy:
 58         pypy_str = " for pypy"
 59     else:
 60         pypy_str = ""
 61     raise TypeError("%s is not a Python version%s I know about" % (version, pypy_str))

if you have a little time please fix it right away, because this tool is really really good sir, I've tried it in python2.7.18 and didn't get any errors, but I'm a little disappointed because I thought this tool could only be used in python2

if you are too busy, just tell me what to fix!
Thanks

rocky commented

The particular problem you encountered has been addressed, although I've disabled creating 3.8 bytecode for now since that's broken.

Right now, it's not of interest to me, the rating on this project is low, and funding for any of the may projects is neglible. So I'd rather be doing other things.

That said, feel free to investigate further and fix if that is of interest to you.

The particular problem you encountered has been addressed, although I've disabled creating 3.8 bytecode for now since that's broken.

Right now, it's not of interest to me, the rating on this project is low, and funding for any of the may projects is neglible. So I'd rather be doing other things.

That said, feel free to investigate further and fix if that is of interest to you.

I always investigate your project, sir, and it's really good, thank you very much for fixing it