如何用objdump生成GAS兼容的汇编代码?
处理32位MIPS-III ELF文件的objdump输出格式化
要得到你期望的精简格式(仅保留标签和GAS可解析的指令),可以通过objdump参数配置结合文本过滤来实现:
1. 让objdump输出GAS兼容的指令别名
MIPS的clear是padduw $reg, $zero, $zero的汇编别名,需要指定GAS语法让objdump识别并输出这个别名,同时明确32位MIPS架构:
objdump -d -m mips:32 -M gas your_elf_file.elf
参数说明:
-d:仅反汇编代码段(.text)-m mips:32:指定目标为32位MIPS-III架构-M gas:启用GAS风格的指令输出,会将padduw替换为GAS可解析的clear别名
2. 过滤冗余内容
用awk过滤掉地址、十六进制机器码和无关头部内容,只保留entry:标签及后续的指令行:
objdump -d -m mips:32 -M gas your_elf_file.elf | awk ' /^entry:/ { print; flag=1; next } flag && /^[[:space:]]/ { sub(/^[[:space:]]+[0-9a-f]+:[[:space:]]+[0-9a-f]+[[:space:]]+/, "") print } /^[^[:space:]]/ && !/^entry:/ { flag=0 } '
这段awk脚本的逻辑:
- 匹配到
entry:时,打印该行并开启处理标记 - 标记开启后,处理所有以空格开头的行:移除开头的地址、十六进制码部分,只保留指令和寄存器
- 遇到非空格开头且不是
entry:的行时,关闭标记,停止处理
最终输出示例
执行完上述命令后,输出会完全符合你的预期:
entry: clear at clear v0 clear v1
内容的提问来源于stack exchange,提问作者Behrad Sharifi
相关产品推荐
相关产品推荐

