如何解决如何将流程执行记录为汇编指令?
我正在编写x86-64解释器,并且作为调试和测试程序的一种方式,我需要将过程记录为汇编指令列表,最好使用at&t语法,并且还要忽略动态库函数调用。并记录cpu寄存器
您知道有什么工具可以帮助您吗?
我尝试使用gdb record save ...
命令,但是与源程序相比输出文件很大
int main() {
return 42;
}
我想要的输出格式是上述程序(与tcc一起编译)的类似格式
400300: 31 ed xor %ebp,%ebp
400302: 49 89 d1 mov %rdx,%r9
400305: 5e pop %rsi
400306: 48 89 e2 mov %rsp,%rdx
400309: 48 83 e4 f0 and $0xfffffffffffffff0,%rsp
40030d: 50 push %rax
40030e: 54 push %rsp
40030f: 4c 8b 05 62 02 20 00 mov 0x200262(%rip),%r8 # 600578
400316: 48 8b 0d 63 02 20 00 mov 0x200263(%rip),%rcx # 600580
40031d: 48 8b 3d 64 02 20 00 mov 0x200264(%rip),%rdi # 600588
400324: ff 15 66 02 20 00 callq *0x200266(%rip) # 600590
__libc_start_main
400331: 55 push %rbp
400332: 48 89 e5 mov %rsp,%rbp
400335: 48 81 ec 00 00 00 00 sub $0x0,%rsp
40033c: b8 2a 00 00 00 mov $0x2a,%eax
400341: c9 leaveq
400342: c3 retq
40032a: f4 hlt
42
解决方法
我使用qemu找到了部分解决方案。
qemu-x86_64 -singlestep -d in_asm,cpu,fpu -dfilter beg..end myProgram 2>&1 | vim -
将beg
和end
替换为程序的第一个和最后一个指令地址,您可以使用
objdump -d yourProgram | vim -
请注意,我绘制矩形的非常简单的程序的输出文件为55MB。而且运行起来很慢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。