我刚刚编写了一些代码来尝试从以下格式的 objdump 输出中解析操作码:-
8048060: 89 e7 mov edi,esp
8048062: 89 fe mov esi,edi
8048064: 6a 6b push 0x6b
8048066: 58 pop eax
8048067: aa stos BYTE PTR es:[edi],al
8048068: 6a 65 push 0x65
804806a: 58 pop eax
804806b: aa stos BYTE PTR es:[edi],al
804806c: 6a 79 push 0x79
804806e: 58 pop eax
804806f: aa stos BYTE PTR es:[edi],al
8048070: 31 c0 xor eax,eax
8048072: aa stos BYTE PTR es:[edi],al
8048073: 40 inc eax
8048074: cd 80 int 0x80
我希望将操作码提取为89 e7 89 f3 .... cd 80
. 我尝试使用以下正则表达式语句:-
opcode = ""
for line in f.readlines():
match = re.search(r' ([\da-f]+):\s+([0-9a-f ]+)', line)
opcode += match.group(2).strip() + " "
虽然上面的代码片段有点适用于我的所有样本,但我确信在我有一条以 [af][space] 结尾的指令的情况下它会失败。
有人可以建议一个更好的正则表达式吗?