通過匯編查看 指針到達(dá)是什么?
- 指針(包括多級(jí)指針): 就是 一個(gè) 地址編號(hào) 贴彼;
- 內(nèi)容:每個(gè)地址編號(hào)里面 都存儲(chǔ)了東西潜腻;
通過下面的例子,可以很簡單的了解
char a = 'A' ;其實(shí) a 是 ‘A’的地址器仗;
char * pa = &a ; pa 是 a的地址
int test() {
/**
左邊的就是給我們程序員看的融涣;
右邊的 才是 真正操作的
*/
// mov w8, #0x41 ; w8 存儲(chǔ) ‘A’ 這個(gè)立即數(shù)
// strb w8, [sp, #0x2f] ; 把值 ‘A’ 存到 a = (sp + 0x2f); 可以看到 a 其實(shí)是 ‘A’的地址
char a = 'A';
// add x8, sp, #0x2f ; 取出 a (這個(gè)a其實(shí)是 ‘A’的地址)
// str x8, [sp, #0x20]; 將a 存儲(chǔ)到 pa =(sp + 0x20) 這個(gè)地址
char * pa = &a;
// add x8, sp, #0x20 ; 取出 pa
// str x8, [sp, #0x18] ; 把 pa 存到 ppa =(sp + 0x18)
char ** ppa = &pa;
// ldr x8, [sp, #0x18]; 取出 ppa的內(nèi)容 pa
// ldr x8, [x8]; 取出 pa 的內(nèi)容 a
// str x8, [sp, #0x10]; a 存放到 pa2 =(sp - 0x10)的地址中
// char *pa2 = *ppa; => char *pa2 = &a;
char *pa2 = *ppa;
// ldr x8, [sp, #0x18] ; 取出 ppa精钮,下面有兩個(gè)指針威鹿,就自身取兩次
// ldr x8, [x8]
// ldrb w8, [x8]
// strb w8, [sp, #0xf] ; 把w8 存儲(chǔ)到 a2 =(sp + 0xf) 這個(gè)地址
char a2 = **ppa;
// ldr x8, [sp, #0x10]轨香;取出 pa2
// ldrb w8, [x8]专普; 把 pa2 的內(nèi)容取出來
char a3 = *pa2;
return 0;
}