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
60ec1f43
Commit
60ec1f43
authored
Nov 08, 2014
by
devttys0
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fixed offset parsing bugs in magic.py
parent
19e064bd
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
27 additions
and
3 deletions
+27
-3
magic.py
src/binwalk/core/magic.py
+27
-3
No files found.
src/binwalk/core/magic.py
View file @
60ec1f43
...
...
@@ -91,6 +91,17 @@ class SignatureLine(object):
# characters to an integer offset. This will fail if the offset is a complex
# value (e.g., '(4.l+16)').
self
.
offset
=
parts
[
0
]
.
replace
(
'>'
,
''
)
# Check to see if the up-level character ('&') has been specified
if
self
.
offset
.
startswith
(
'&'
):
self
.
uplevel
=
True
self
.
offset
=
self
.
offset
[
1
:]
else
:
self
.
uplevel
=
False
# Check if the offset is an indirect offset
self
.
is_indirect_offset
=
self
.
offset
.
startswith
(
'('
)
try
:
self
.
offset
=
int
(
self
.
offset
,
0
)
except
ValueError
as
e
:
...
...
@@ -439,7 +450,9 @@ class Magic(object):
v
=
expression
# Evaluate the final expression
return
binwalk
.
core
.
common
.
MathExpression
(
v
)
.
value
value
=
binwalk
.
core
.
common
.
MathExpression
(
v
)
.
value
return
value
def
_analyze
(
self
,
signature
,
offset
):
'''
...
...
@@ -453,6 +466,7 @@ class Magic(object):
description
=
[]
tag_strlen
=
None
max_line_level
=
0
last_indirect_offset
=
0
tags
=
{
'id'
:
signature
.
id
,
'offset'
:
offset
,
'invalid'
:
False
}
# Apply each line of the signature to self.data, starting at the specified offset
...
...
@@ -466,6 +480,11 @@ class Magic(object):
else
:
line_offset
=
self
.
_do_math
(
offset
,
line
.
offset
)
# If the uplevel delimiter was set in the signature line, add the last indirect
# offset to the line's specified offset.
if
line
.
uplevel
:
line_offset
+=
last_indirect_offset
# The start of the data needed by this line is at offset + line_offset.
# The end of the data will be line.size bytes later.
start
=
offset
+
line_offset
...
...
@@ -581,6 +600,10 @@ class Magic(object):
if
not
self
.
show_invalid
and
tags
[
'invalid'
]:
break
# Track the last indirect offset value
if
line
.
is_indirect_offset
:
last_indirect_offset
=
line_offset
# If this line satisfied its comparison, +1 the max indentation level
max_line_level
=
line
.
level
+
1
else
:
...
...
@@ -680,8 +703,9 @@ class Magic(object):
for
line
in
lines
:
# Split at the first comment delimiter (if any) and strip the result
line
=
line
.
split
(
'#'
)[
0
]
.
strip
()
# Ignore blank lines and lines that are nothing but comments
if
line
:
# Ignore blank lines and lines that are nothing but comments.
# We also don't support the !mime style line entries.
if
line
and
line
[
0
]
!=
'!'
:
# Parse this signature line
sigline
=
SignatureLine
(
line
)
# Level 0 means the first line of a signature entry
...
...
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