使用 gcc 或任何其他编译器编译程序时,我可以让编译器在内存中生成指令映射吗?
就像是:
0000: First Instruction
0001: Second Instruction
1000: Third Instruction (after a jump for example)
我想使用这些地址作为测试指令缓存设计的模式。我不在乎编译了什么指令或类似的东西,只关心这些指令的地址。这可能吗?
使用 gcc 或任何其他编译器编译程序时,我可以让编译器在内存中生成指令映射吗?
就像是:
0000: First Instruction
0001: Second Instruction
1000: Third Instruction (after a jump for example)
我想使用这些地址作为测试指令缓存设计的模式。我不在乎编译了什么指令或类似的东西,只关心这些指令的地址。这可能吗?
最简单的方法必须是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
或其他东西将它们过滤掉。