次の形式の 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] [スペース] で終わる命令がある場合は失敗することは確かです。
誰かが同じものに対してより良い正規表現を提案できますか?