Giter Club home page Giter Club logo

thoth's Issues

remove dep to cairo-lang

the only place we need to import from cairo-lang library is for the decode_instruction

Could be interesting to copy decode_instruction and the Instruction directly in this program to prevent cairo-lang dependency and potential issue if people are not using venv

get_code

We can not detect the start/end of a function

[DISAS] handle more properly contract interface

in this test: tests/json_files/starknet_contract_interface.json

there is no bytecode because it's a contract interface.
For the moment we just quit and inform the user but we should do something else ;)

image

CALL ABS/REL

Disassembler does not make a difference between CALL ABS and CALL REL
image
image

I fixed the bug for the decompiler, just need to do the same for the disassembler

Implicit Arguments

We don't have the disassembling of functions implicit arguments;
For this code: cairo_implicit_parameters.cairo
builtins_in_functions
And this bytecode: cairo_implicit_parameters.json
buitlins_in_functions_json
We have:
builtins_in_functions_disass

Python Package

The project should be allow the user to install it as a python package

big_struct

We don't have the disassembling of the objects (struct) and their attributes (members):
big_struct_disass
while we have:
big_struct
big_struct_json

[CFG] [DISAS] implement label in disassembly & cfg

we can find all label by looking at relative jump offset (JUMP_REL 9) and relative CALL (CALL rel 3145)

once done we should have an output like:

offset 2458:  ADD            AP, 1          
offset 2459:  ASSERT_EQ      [AP], [FP]     
offset 2459:  ADD            AP, 1          
offset 2460:  CALL           rel 4870       
offset 2460:  ADD            AP, 2          

label_2462:

offset 2462:  ASSERT_EQ      [AP], [FP-4] + [FP]
offset 2462:  ADD            AP, 1          
offset 2463:  ASSERT_EQ      [FP-3], [[AP-1]]
offset 2464:  ASSERT_EQ      [AP], [FP] + 1 
offset 2464:  ADD            AP, 1          
offset 2466:  ASSERT_EQ      [AP], [FP] + 1 
offset 2466:  ADD            AP, 1          
offset 2468:  ASSERT_EQ      [AP], [AP-4]   
offset 2468:  ADD            AP, 1          

print of APUpdate

APUpdate should be shown only after an ASSERT_EQ.
Bug is fixed on the decompiler, need to fix it also in the disassembler.

Decorators

We don't have the decorators disassembling.
For those codes (decorators1.cairo decorators2.cairo decorators3.cairo and constructor.cairo, l1_default.cairo):
decorators1
decorators2
decorators3
constructor1
l1_default

And those bytecodes:

(decorators1.json)
storage_var:
read
write

view:
view

external:
external
or
externals

(decorators2.json)
raw_input and raw_output:
raw_input

(decorators3.json)
event:
event

(constructor.json)
constructor:
constructor
or
constructor2

(l1_default.json)
l1_handler:
l1_handler
l1_handler_json

[CFG] print in textual form

we need to find a way to print the CFG like the disassembly output

ideally something like radare2 will be nice

image

imports with parentheses

python3 __main__.py -file tests/json_files/starknet_imports_with_parentheses.json

Traceback (most recent call last):
File "main.py", line 69, in
main()
File "main.py", line 50, in main
disassembler = Disassembler(args.file)
File "/home/fuzz/cairo_disassembler/disassembler.py", line 24, in init
self.analyze()
File "/home/fuzz/cairo_disassembler/disassembler.py", line 31, in analyze
self.json = parseToJson(self.file)
File "/home/fuzz/cairo_disassembler/jsonParser.py", line 126, in parseToJson
data, func_offset, func_identifiers = extractData(path)
File "/home/fuzz/cairo_disassembler/jsonParser.py", line 82, in extractData
json_data = json.load(f)
File "/usr/lib/python3.8/json/init.py", line 293, in load
return loads(fp.read(),
File "/usr/lib/python3.8/json/init.py", line 357, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3.8/json/decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python3.8/json/decoder.py", line 353, in raw_decode
obj, end = self.scan_once(s, idx)
json.decoder.JSONDecodeError: Invalid control character at: line 84067 column 109 (char 4194304)

[DISAS] flag color

add a flag to print disassembly with color :
builtins/struct
function name
call and return
jump

[DISAS] add support for references

Some identifiers (with type = "reference") actually contains value that we can print as comment during disassembly

(warning: I'm not speaking about the "reference manager" section)

image

image

Dissa

When we try to get the callflowgraph of the cairo_direct_recursion.json we don't have the direct recursion.
Command:
python3 __main__.py -file tests/json_files/cairo_direct_recursion.json -call
direct_recursion_cfg_fail
Result:
cfg

APupdate - if/else

in this example
image

We assign :

[AP] = 0

And we update ap.
So in the if statement, the AP used is not the same as the assigned before.
What should we do in this case ?

CAIRO SOURCE CODE :

image

Format of the implicit argument disass

We have:
python3 __main__.py -file tests/json_files/cairo_implicit_parameters.json
image
But the format of the implicit argument is using brackets { } and the classic arguments are using ( ):
cairo_implicit_parameters.cairo
image

[CALL] [DISAS] extract and show event info

The information that a function is an event can be found inside the abi section
for file: starknet_decorators3.json

image

we need to extract it, print it in the disassembler and the callgraph

support indirect call

In some cases, we can have indirect calls

image

It's not supported yet.

on the current codebase we need to add:

  • proper disassembly print i.e. call abs [fp + 4], call rel [fp + 4]
  • add indirect call info inside the callgraph (dashed circle?)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.