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
7c3ba831
Commit
7c3ba831
authored
Dec 21, 2013
by
devttys0
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fixed bugs in opcode module
parent
ff54c6ff
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
42 additions
and
31 deletions
+42
-31
module.py
src/binwalk/core/module.py
+1
-1
opcodes.py
src/binwalk/modules/opcodes.py
+41
-30
No files found.
src/binwalk/core/module.py
View file @
7c3ba831
...
@@ -300,7 +300,7 @@ class Module(object):
...
@@ -300,7 +300,7 @@ class Module(object):
self
.
results
.
append
(
r
)
self
.
results
.
append
(
r
)
# Update the progress status automatically if it is not being done manually by the module
# Update the progress status automatically if it is not being done manually by the module
if
r
.
offset
and
self
.
AUTO_UPDATE_STATUS
:
if
r
.
offset
and
r
.
file
and
self
.
AUTO_UPDATE_STATUS
:
self
.
status
.
total
=
r
.
file
.
length
self
.
status
.
total
=
r
.
file
.
length
self
.
status
.
completed
=
r
.
offset
self
.
status
.
completed
=
r
.
offset
...
...
src/binwalk/modules/opcodes.py
View file @
7c3ba831
...
@@ -32,6 +32,7 @@ class Instruction(object):
...
@@ -32,6 +32,7 @@ class Instruction(object):
class
Disassembler
(
object
):
class
Disassembler
(
object
):
MIN_INSTRUCTION_COUNT
=
6
INSTRUCTION_SIZE
=
4
INSTRUCTION_SIZE
=
4
OPCODE_INDEX
=
0
OPCODE_INDEX
=
0
OPCODE_MASK
=
0
OPCODE_MASK
=
0
...
@@ -96,7 +97,6 @@ class ARM(ARMEB):
...
@@ -96,7 +97,6 @@ class ARM(ARMEB):
class
OpcodeValidator
(
Module
):
class
OpcodeValidator
(
Module
):
MIN_INS_COUNT
=
6
MIN_CONFIDENCE
=
0.0
MIN_CONFIDENCE
=
0.0
TITLE
=
'Opcode'
TITLE
=
'Opcode'
...
@@ -143,11 +143,14 @@ class OpcodeValidator(Module):
...
@@ -143,11 +143,14 @@ class OpcodeValidator(Module):
for
disassembler
in
self
.
search
(
fp
):
for
disassembler
in
self
.
search
(
fp
):
if
not
self
.
config
.
verbose
and
disassembler
.
confidence
>
self
.
MIN_CONFIDENCE
:
if
not
self
.
config
.
verbose
and
disassembler
.
confidence
>
self
.
MIN_CONFIDENCE
:
desc
=
disassembler
.
__class__
.
__name__
+
" executable code, endianess: "
+
disassembler
.
ENDIANESS
desc
=
self
.
build_description_string
(
disassembler
)
self
.
result
(
description
=
desc
,
confidence
=
disassembler
.
confidence
,
file
=
fp
,
plot
=
False
)
self
.
result
(
description
=
desc
,
confidence
=
disassembler
.
confidence
,
file
=
fp
,
plot
=
False
)
self
.
footer
()
self
.
footer
()
def
build_description_string
(
self
,
disassembler
):
return
disassembler
.
__class__
.
__name__
+
" executable code, endianess: "
+
disassembler
.
ENDIANESS
def
is_valid_sequence
(
self
,
disassembler
,
data
):
def
is_valid_sequence
(
self
,
disassembler
,
data
):
j
=
0
j
=
0
retval
=
True
retval
=
True
...
@@ -167,42 +170,50 @@ class OpcodeValidator(Module):
...
@@ -167,42 +170,50 @@ class OpcodeValidator(Module):
return
retval
return
retval
def
search
(
self
,
fp
):
def
search
(
self
,
fp
):
winners
=
{}
results
=
{}
total_hits
=
{}
offset_range
=
range
(
0
,
4
)
for
i
in
offset_range
:
total_hits
[
i
]
=
0
for
disassembler
in
self
.
disassemblers
:
results
[
disassembler
]
=
{}
for
i
in
offset_range
:
results
[
disassembler
][
i
]
=
0
while
True
:
while
True
:
i
=
0
offset
=
0
(
data
,
dlen
)
=
fp
.
read_block
()
(
data
,
dlen
)
=
fp
.
read_block
()
if
not
data
:
if
not
data
:
break
break
while
i
<
dlen
:
while
i
<
dlen
:
count
=
1
for
j
in
offset_range
:
offset
=
i
+
j
for
disassembler
in
get_keys
(
self
.
disassemblers
)
:
for
disassembler
in
self
.
disassemblers
:
if
self
.
honor_instruction_alignment
and
(
i
%
disassembler
.
INSTRUCTION_SIZE
):
if
self
.
honor_instruction_alignment
and
(
offset
%
disassembler
.
INSTRUCTION_SIZE
):
continue
continue
ins
=
disassembler
.
disassemble
(
data
[
i
:
i
+
disassembler
.
INSTRUCTION_SIZE
])
ins
=
disassembler
.
disassemble
(
data
[
offset
:
offset
+
disassembler
.
INSTRUCTION_SIZE
])
if
ins
.
valid
:
if
ins
.
valid
:
sequence_size
=
self
.
MIN_INS_COUNT
*
disassembler
.
INSTRUCTION_SIZE
sequence_size
=
disassembler
.
MIN_INSTRUCTION_COUNT
*
disassembler
.
INSTRUCTION_SIZE
sequence
=
data
[
i
:
i
+
sequence_size
]
if
self
.
is_valid_sequence
(
disassembler
,
data
[
offset
:
offset
+
sequence_size
]):
desc
=
self
.
build_description_string
(
disassembler
)
if
len
(
sequence
)
==
sequence_size
and
self
.
is_valid_sequence
(
disassembler
,
sequence
):
self
.
result
(
description
=
desc
,
offset
=
offset
,
file
=
fp
,
display
=
self
.
config
.
verbose
)
self
.
result
(
description
=
disassembler
.
__class__
.
__name__
+
" instructions, endianess: "
+
disassembler
.
ENDIANESS
,
results
[
disassembler
][
j
]
+=
1
offset
=
(
fp
.
total_read
-
dlen
+
i
),
total_hits
[
j
]
+=
1
file
=
fp
,
display
=
self
.
config
.
verbose
)
i
+=
len
(
offset_range
)
self
.
disassemblers
[
disassembler
]
+=
1
for
(
disassembler
,
offset_results
)
in
iterator
(
results
):
count
=
disassembler
.
INSTRUCTION_SIZE
*
self
.
MIN_INS_COUNT
sorted_offsets
=
sorted
(
offset_results
,
key
=
offset_results
.
get
,
reverse
=
True
)
break
winning_offset
=
sorted_offsets
[
0
]
i
+=
count
if
total_hits
[
winning_offset
]
>
0
and
offset_results
[
winning_offset
]
>
0
:
disassembler
.
confidence
=
((
offset_results
[
winning_offset
]
/
float
(
total_hits
[
winning_offset
]))
*
100
)
total_hits
=
0
winners
[
disassembler
]
=
disassembler
.
confidence
for
(
k
,
v
)
in
iterator
(
self
.
disassemblers
):
return
sorted
(
winners
,
key
=
winners
.
get
,
reverse
=
True
)
total_hits
+=
v
for
(
k
,
v
)
in
iterator
(
self
.
disassemblers
):
k
.
confidence
=
((
v
/
float
(
total_hits
))
*
100
)
return
sorted
(
self
.
disassemblers
,
key
=
self
.
disassemblers
.
get
,
reverse
=
True
)
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