我剛剛將一個 CPP 源代碼編譯成一個目標.o檔案,前幾行如下所示:
Disassembly of section .text:
0000000000000000 <_Z8mainLoopv>:
0: f3 0f 1e fa endbr64
4: 55 push %rbp
5: 48 89 e5 mov %rsp,%rbp
8: 41 55 push %r13
a: 41 54 push %r12
c: 53 push %rbx
d: 48 81 ec 88 00 00 00 sub $0x88,%rsp
14: 64 48 8b 04 25 28 00 mov %fs:0x28,%rax
我假設第一列是說明的地址,對嗎?如果是這樣,為什么它們不是連續的?像這樣的東西:
0: f3 0f 1e fa endbr64
1: 55 push %rbp
2: 48 89 e5 mov %rsp,%rbp
3: 41 55 push %r13
4: 41 54 push %r12
5: 53 push %rbx
6: 48 81 ec 88 00 00 00 sub $0x88,%rsp
7: 64 48 8b 04 25 28 00 mov %fs:0x28,%rax
uj5u.com熱心網友回復:
第一列是指令的地址。
因為 x86_64 指令的長度不同(例如 ARM64),所以值差異會有所不同。第二列顯示每條指令的位元組。請注意,它們具有不同的長度。
uj5u.com熱心網友回復:
每條指令可以占用多于一個位元組的空間。這里,第一條指令占用 4 個位元組的空間 ( f3 0f 1e fa),因此下一條指令從第 4 個位元組開始。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/412644.html
標籤:
上一篇:將變數內容匯出到檔案
下一篇:將64位常量移至記憶體
