所以最近我一直在查看我的 C++ 代码的反汇编,并且不得不手动跟踪每个寄存器中的内容,如下所示:
95: 48 8b 16 mov (%rsi),%rdx ; %rdx = raggedCross.sink
98: 48 8b 42 38 mov 0x38(%rdx),%rax ; %rax = sink.table
9c: 8b 4a 10 mov 0x10(%rdx),%ecx ; %ecx = sink.baseCol
9f: 48 8b 70 50 mov 0x50(%rax),%rsi ; %rsi = table.starts
a3: 89 c8 mov %ecx,%eax ; %eax = baseCol
a5: 83 c1 1c add $0x1c,%ecx ; %ecx = baseCol + 1
等等。注释是我的,通过查找 C++ 类中各种字段(例如 sink、table、baseCol、starts)的偏移量手动添加的。
这很简单,但是乏味且耗时:对于程序来说,这是完美的事情。gdb 似乎知道结构中各个字段的偏移量:我可以做 &((Table *)0x1200)->starts 并告诉正确的地址。所以,这个信息就在身边。
是否有一些反汇编程序可以使用此信息为我注释代码?
如果做不到这一点,我可以自己写。gdb 从哪里获得偏移量?