编译时如何生成指令图?

时间:2013-09-23 00:37:17

标签: gcc compiler-construction

用gcc或任何其他编译器编译程序时,我能以某种方式让编译器在内存中生成指令映射吗?

类似的东西:

0000: First Instruction
0001: Second Instruction
1000: Third Instruction (after a jump for example)

我想将这些地址用作模式来测试指令缓存的设计。我不关心编译指令或类似的指令,只关注这些指令的地址。这可能吗?

1 个答案:

答案 0 :(得分:1)

最简单的方法是在编译输出上使用objdump。例如:

$ objdump -d /tmp/test

/tmp/test:     file format elf64-x86-64


Disassembly of section .text:

0000000000400410 <_start>:
  400410:       31 ed                   xor    %ebp,%ebp
  400412:       49 89 d1                mov    %rdx,%r9
  400415:       5e                      pop    %rsi
  400416:       48 89 e2                mov    %rsp,%rdx
  400419:       48 83 e4 f0             and    $0xfffffffffffffff0,%rsp
  40041d:       50                      push   %rax
  40041e:       54                      push   %rsp
  40041f:       49 c7 c0 b0 05 40 00    mov    $0x4005b0,%r8
  400426:       48 c7 c1 20 05 40 00    mov    $0x400520,%rcx
  40042d:       48 c7 c7 fa 04 40 00    mov    $0x4004fa,%rdi
  400434:       e8 b7 ff ff ff          callq  4003f0 <__libc_start_main@plt>
  400439:       f4                      hlt    
  40043a:       66 0f 1f 44 00 00       nopw   0x0(%rax,%rax,1)

等等。如果您只想拥有地址,只需使用sed或其他内容过滤掉它们。