如何用C++正则表达式匹配汇编指令及其地址?
提取反汇编文本中的地址与汇编指令
正则表达式构建思路
要匹配机器码部分,你可以用([a-f0-9]{2}\s+)*[a-f0-9]{2}来表示“一系列两位十六进制数”——这个表达式会匹配一个或多个以空格分隔的两位十六进制数,完全对应机器码的格式。
完整正则表达式
最终可使用的正则表达式如下:
^([a-f0-9]{8}):\s+(([a-f0-9]{2}\s+)*[a-f0-9]{2})\s+(.*)$
各分组对应内容:
- 第1组:8位十六进制地址
- 第2组:完整的机器码部分
- 第4组:需要提取的汇编指令
匹配效果验证
用你提供的示例文本测试:
00000000: ae ee move $1, $2
00000004: c1 add $2, $2, $3
00000006: a2 aa e3 addi $1, $2, $4
匹配后可得到:
- 第一行:地址
00000000,指令move $1, $2 - 第二行:地址
00000004,指令add $2, $2, $3 - 第三行:地址
00000006,指令addi $1, $2, $4
简化版正则(仅提取地址与指令)
如果不需要机器码,可简化正则跳过该部分:
^([a-f0-9]{8}):\s+([a-f0-9]{2}\s+)*[a-f0-9]{2}\s+(.*)$
此时第1组对应地址,第3组对应指令。
内容的提问来源于stack exchange,提问作者余政倫
相关产品推荐
相关产品推荐

