LabelDict = {}\r
ReLabel = re.compile('LABEL\((\w+)\)')\r
ReOffset = re.compile('OFFSET_OF\((\w+)\)')\r
+ LabelOffset = 0\r
+ for Index, Item in enumerate(ListItem):\r
+ # compute byte offset of every LABEL\r
+ Item = Item.strip()\r
+ try:\r
+ LabelList = ReLabel.findall(Item)\r
+ for Label in LabelList:\r
+ if Label not in LabelDict.keys():\r
+ LabelDict[Label] = str(LabelOffset)\r
+ Item = ReLabel.sub('', Item)\r
+ except:\r
+ pass\r
+ if Item.startswith('UINT8'):\r
+ LabelOffset = LabelOffset + 1\r
+ elif Item.startswith('UINT16'):\r
+ LabelOffset = LabelOffset + 2\r
+ elif Item.startswith('UINT32'):\r
+ LabelOffset = LabelOffset + 4\r
+ elif Item.startswith('UINT64'):\r
+ LabelOffset = LabelOffset + 8\r
+ else:\r
+ ItemValue, ItemSize = ParseFieldValue(Item)\r
+ LabelOffset = LabelOffset + ItemSize\r
+\r
for Index, Item in enumerate(ListItem):\r
# for LABEL parse\r
Item = Item.strip()\r
Re = re.compile('OFFSET_OF\(%s\)'% Offset)\r
Item = Re.sub(LabelDict[Offset], Item)\r
else:\r
- raise BadExpression('%s not defined before use' % Offset)\r
+ raise BadExpression('%s not defined' % Offset)\r
ValueType = ""\r
if Item.startswith('UINT8'):\r
ItemSize = 1\r