detects numeric label as label

This commit is contained in:
JanLJL
2020-08-03 16:59:48 +02:00
parent 5361b63b52
commit e715badcf9

View File

@@ -34,8 +34,13 @@ class ParserX86ATT(BaseParser):
+ pp.Optional(relocation).setResultsName('relocation')
).setResultsName('identifier')
# Label
numeric_identifier = pp.Group(
pp.Word(pp.nums).setResultsName('name') + pp.Optional(pp.oneOf('b f', caseless=True))
).setResultsName('identifier')
self.label = pp.Group(
identifier.setResultsName('name') + pp.Literal(':') + pp.Optional(self.comment)
(identifier | numeric_identifier).setResultsName('name')
+ pp.Literal(':')
+ pp.Optional(self.comment)
).setResultsName(self.LABEL_ID)
# Register: pp.Regex('^%[0-9a-zA-Z]+{}{z},?')
self.register = pp.Group(
@@ -132,7 +137,7 @@ class ParserX86ATT(BaseParser):
pp.alphanums
).setResultsName('mnemonic')
# Combine to instruction form
operand_first = pp.Group(self.register ^ immediate ^ memory ^ identifier)
operand_first = pp.Group(self.register ^ immediate ^ memory ^ identifier ^ numeric_identifier)
operand_rest = pp.Group(self.register ^ immediate ^ memory)
self.instruction_parser = (
mnemonic
@@ -305,7 +310,10 @@ class ParserX86ATT(BaseParser):
def process_label(self, label):
"""Post-process label asm line"""
# remove duplicated 'name' level due to identifier
label['name'] = label['name']['name']
if 'name' in label['name'][0]:
label['name'] = label['name'][0]['name']
else:
label['name'] = label['name'][0]
return AttrDict({self.LABEL_ID: label})
def process_immediate(self, immediate):