Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
B
binwalk
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
fact-gitdep
binwalk
Commits
18433d0d
Commit
18433d0d
authored
Nov 29, 2013
by
devttys0
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added plotter.py
parent
50eb5273
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
193 additions
and
0 deletions
+193
-0
plotter.py
src/binwalk/plotter.py
+193
-0
No files found.
src/binwalk/plotter.py
0 → 100644
View file @
18433d0d
import
os
from
binwalk.compat
import
*
from
binwalk.common
import
BlockFile
class
Plotter
(
object
):
DIMENSIONS
=
3
VIEW_DISTANCE
=
1024
def
__init__
(
self
,
files
,
offset
=
0
,
length
=
0
,
weight
=
None
,
verbose
=
False
):
import
pyqtgraph.opengl
as
gl
from
pyqtgraph.Qt
import
QtGui
self
.
verbose
=
verbose
self
.
files
=
files
self
.
weight
=
weight
self
.
offset
=
offset
self
.
length
=
length
self
.
app
=
QtGui
.
QApplication
([])
self
.
window
=
gl
.
GLViewWidget
()
self
.
window
.
opts
[
'distance'
]
=
self
.
VIEW_DISTANCE
if
len
(
self
.
files
)
==
1
:
self
.
window
.
setWindowTitle
(
self
.
files
[
0
])
def
_print
(
self
,
message
):
if
self
.
verbose
:
print
(
message
)
def
_generate_plot_points
(
self
,
data_points
,
data_weights
):
plot_points
=
set
()
max_plot_points
=
(
24
*
1024
)
if
self
.
weight
:
weight
=
self
.
weight
else
:
self
.
_print
(
"Calculating weight..."
)
weight
=
1
if
len
(
data_points
)
>
max_plot_points
:
weightings
=
{}
for
i
in
range
(
1
,
11
):
weightings
[
i
]
=
0
for
point
in
data_points
:
for
w
in
get_keys
(
weightings
):
if
data_weights
[
point
]
>=
w
:
weightings
[
w
]
+=
1
if
weightings
[
w
]
>
max_plot_points
:
del
weightings
[
w
]
if
len
(
weightings
)
<=
1
:
break
if
weightings
:
weight
=
min
(
weightings
)
self
.
_print
(
"Weight:
%
d"
%
weight
)
for
point
in
data_points
:
if
data_weights
[
point
]
>=
weight
:
plot_points
.
add
(
point
)
return
plot_points
def
_generate_data_point
(
self
,
data
):
return
(
0
,
0
,
0
)
def
_generate_data_points
(
self
,
file_name
):
i
=
0
data_weights
=
{}
data_points
=
set
()
self
.
_print
(
"Generating data points for
%
s"
%
file_name
)
with
BlockFile
(
file_name
,
'r'
,
offset
=
self
.
offset
,
length
=
self
.
length
)
as
fp
:
while
True
:
(
data
,
dlen
)
=
fp
.
read_block
()
if
not
data
or
not
dlen
:
break
i
=
0
while
(
i
+
(
self
.
DIMENSIONS
-
1
))
<
dlen
:
point
=
self
.
_generate_data_point
(
data
[
i
:
i
+
self
.
DIMENSIONS
])
if
point
in
data_points
:
data_weights
[
point
]
+=
1
else
:
data_points
.
add
(
point
)
data_weights
[
point
]
=
1
i
+=
3
return
(
data_points
,
data_weights
)
def
_generate_plot
(
self
,
plot_points
,
point_weights
):
import
numpy
as
np
import
pyqtgraph.opengl
as
gl
nitems
=
len
(
plot_points
)
pos
=
np
.
empty
((
nitems
,
3
))
size
=
np
.
empty
((
nitems
))
color
=
np
.
empty
((
nitems
,
4
))
i
=
0
for
point
in
plot_points
:
r
=
0.0
g
=
0.0
b
=
0.0
pos
[
i
]
=
point
size
[
i
]
=
.
05
if
point_weights
[
point
]
>
15
:
r
=
1.0
elif
point_weights
[
point
]
>
5
:
g
=
1.0
r
=
1.0
else
:
g
=
1.0
color
[
i
]
=
(
r
,
g
,
b
,
1.0
)
i
+=
1
scatter_plot
=
gl
.
GLScatterPlotItem
(
pos
=
pos
,
size
=
size
,
color
=
color
,
pxMode
=
False
)
scatter_plot
.
translate
(
-
127.5
,
-
127.5
,
-
127.5
)
return
scatter_plot
def
plot
(
self
):
from
pyqtgraph.Qt
import
QtCore
,
QtGui
self
.
window
.
show
()
for
file_name
in
self
.
files
:
(
data_points
,
data_weights
)
=
self
.
_generate_data_points
(
file_name
)
self
.
_print
(
"Generating plot points from
%
d data points"
%
len
(
data_points
))
plot_points
=
self
.
_generate_plot_points
(
data_points
,
data_weights
)
self
.
_print
(
"Generating graph from
%
d plot points"
%
len
(
plot_points
))
self
.
window
.
addItem
(
self
.
_generate_plot
(
plot_points
,
data_weights
))
t
=
QtCore
.
QTimer
()
t
.
start
(
50
)
QtGui
.
QApplication
.
instance
()
.
exec_
()
class
Plotter3D
(
Plotter
):
DIMENSIONS
=
3
def
_generate_data_point
(
self
,
data
):
return
(
ord
(
data
[
0
]),
ord
(
data
[
1
]),
ord
(
data
[
2
]))
class
Plotter2D
(
Plotter
):
'''
This is of questionable use.
'''
DIMENSIONS
=
2
plane_count
=
-
1
def
_generate_data_point
(
self
,
data
):
self
.
plane_count
+=
1
if
self
.
plane_count
>
2
:
self
.
plane_count
=
0
if
self
.
plane_count
==
0
:
return
(
0
,
ord
(
data
[
0
]),
ord
(
data
[
1
]))
elif
self
.
plane_count
==
1
:
return
(
ord
(
data
[
0
]),
0
,
ord
(
data
[
1
]))
elif
self
.
plane_count
==
2
:
return
(
ord
(
data
[
0
]),
ord
(
data
[
1
]),
0
)
if
__name__
==
'__main__'
:
import
sys
try
:
weight
=
int
(
sys
.
argv
[
2
])
except
:
weight
=
None
Plotter3D
(
sys
.
argv
[
1
:],
weight
=
weight
,
verbose
=
True
)
.
plot
()
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment