0

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

就像是:

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

我想使用这些地址作为测试指令缓存设计的模式。我不在乎编译了什么指令或类似的东西,只关心这些指令的地址。这可能吗?

4

1 回答 1

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或其他东西将它们过滤掉。

于 2013-09-23T00:43:21.767 回答