用gcc或任何其他编译器编译程序时,我能以某种方式让编译器在内存中生成指令映射吗?
类似的东西:
0000: First Instruction
0001: Second Instruction
1000: Third Instruction (after a jump for example)
我想将这些地址用作模式来测试指令缓存的设计。我不关心编译指令或类似的指令,只关注这些指令的地址。这可能吗?
答案 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
或其他内容过滤掉它们。