国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

ARM64函數(shù)調(diào)用流程分析

這篇具有很好參考價值的文章主要介紹了ARM64函數(shù)調(diào)用流程分析。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

ARM64 程序調(diào)用標(biāo)準

1 ARM64 函數(shù)調(diào)用實例

下圖是介紹一個簡單函數(shù)調(diào)用的示例,在該示例中簡單介紹了棧的使用。
ARM64函數(shù)調(diào)用流程分析,arm64,ARM64函數(shù)調(diào)用流程分析,AAPCS,棧幀使用

2 對應(yīng)代碼的分析

2.1 main函數(shù)及其對應(yīng)的匯編程序

2.1.1 main的C代碼實現(xiàn)

int main(void)
{
        long a = 1;                                                                             
        long b = 2;

        printf("The current function is %s a:%ld b:%ld\r\n", __func__, a, b); 

        test_fun_a(a, b, 0, 1); 

        a = a + b;
        b = a + b;

        return 0;
}

2.1.2 main函數(shù)對應(yīng)匯編及其分析

  • 0000000000000114 <main>:main函數(shù)的入口
  • 114: a9be7bfd stp x29, x30, [sp, #-32]! 將sp = sp - 32,為main函數(shù)開一個32Byte的棧空間,然后將x29(FP),X30(LR)寄存器的值存放在SP和SP + 8的位置處。
  • 118: 910003fd mov x29, sp 將SP寄存器的值存放到X29(FP)寄存器中,即FP寄存器指向當(dāng)前main函數(shù)的棧頂。
  • 11c: d2800020 mov x0, #0x1 // #1 將局部變量a的值保存到x0寄存器中
  • 120: f9000be0 str x0, [sp, #16] 將局部變量a的值保存到sp + 16的位置處。
  • 124: d2800040 mov x0, #0x2 // #2 將局部變量b的值保存到x0寄存器中
  • 128: f9000fe0 str x0, [sp, #24] 將局部變量b的值保存到sp + 24棧內(nèi)存處
  • 12c: f9400fe3 ldr x3, [sp, #24] 從棧中加載局部變量b的值到x3寄存器中
  • 130: f9400be2 ldr x2, [sp, #16]從棧中加載局部變量a的值到x2寄存器中
  • 134: 90000000 adrp x0, 0 <test_fun_b>加載test_func_b函數(shù)的地址到x0寄存器中
  • 138: 91000001 add x1, x0, #0x0將x0 + 0的值保存到x1寄存器中
  • 13c: 90000000 adrp x0, 0 <test_fun_b>加載test_func_b函數(shù)的地址到x0寄存器中
  • 140: 91000000 add x0, x0, #0x0將x0 + 0的值保存到x0寄存器中
  • 144: 94000000 bl 0 <printf>調(diào)用函數(shù)printf
  • 148: d2800023 mov x3, #0x1 // #1將1保存到x3寄存器中,作為調(diào)用test_fun_a函數(shù)的第4個參數(shù)
  • 14c: d2800002 mov x2, #0x0 // #0將0保存到寄存器x2中,作為調(diào)用test_fun_a函數(shù)的第3個參數(shù)
  • 150: f9400fe1 ldr x1, [sp, #24]從棧中取出局部變量b的值,放到x1寄存器中,作為調(diào)用test_fun_a的第2個參數(shù)
  • 154: f9400be0 ldr x0, [sp, #16]從棧中取出局部變量a的值,放到x0寄存器中,作為調(diào)用test_fun_a的第1個參數(shù)
  • 158: 94000000 bl 80 <test_fun_a>調(diào)用test_func_a函數(shù),其參數(shù)分別為前面的x0 ~ x3寄存器的值
  • 15c: f9400be1 ldr x1, [sp, #16] 加載局部變量a的值到x1寄存器
  • 160: f9400fe0 ldr x0, [sp, #24]加載局部變量b的值到x0寄存器
  • 164: 8b000020 add x0, x1, x0 a = a + b
  • 168: f9000be0 str x0, [sp, #16] 將計算到的局部變量a的值重新存到棧中
  • 16c: f9400fe1 ldr x1, [sp, #24]從棧中取出局部變量b的值
  • 170: f9400be0 ldr x0, [sp, #16]從棧中取出局部變量a的值
  • 174: 8b000020 add x0, x1, x0 b = a + b
  • 178: f9000fe0 str x0, [sp, #24]將新計算得到的局部變量b的值重新保存到棧中
  • 17c: 52800000 mov w0, #0x0 // #0給w0寄存器賦值為0,該操作是用在ret指令執(zhí)行時,返回0值。
  • 180: a8c27bfd ldp x29, x30, [sp], #32恢復(fù)x29(FP)和X30(LR)的值,同時SP = SP + 32
  • 184: d65f03c0 ret 返回調(diào)用的指令,該指令執(zhí)行的時候會返回lr寄存器指向的函數(shù)中。
                                                                                             
0000000000000114 <main>:
 114:   a9be7bfd        stp     x29, x30, [sp, #-32]!
 118:   910003fd        mov     x29, sp
 11c:   d2800020        mov     x0, #0x1                        // #1
 120:   f9000be0        str     x0, [sp, #16]
 124:   d2800040        mov     x0, #0x2                        // #2
 128:   f9000fe0        str     x0, [sp, #24]
 12c:   f9400fe3        ldr     x3, [sp, #24]
 130:   f9400be2        ldr     x2, [sp, #16]
 134:   90000000        adrp    x0, 0 <test_fun_b>
 138:   91000001        add     x1, x0, #0x0
 13c:   90000000        adrp    x0, 0 <test_fun_b>
 140:   91000000        add     x0, x0, #0x0
 144:   94000000        bl      0 <printf>
 148:   d2800023        mov     x3, #0x1                        // #1
 14c:   d2800002        mov     x2, #0x0                        // #0
 150:   f9400fe1        ldr     x1, [sp, #24]
 154:   f9400be0        ldr     x0, [sp, #16]
 158:   94000000        bl      80 <test_fun_a>
 15c:   f9400be1        ldr     x1, [sp, #16]
 160:   f9400fe0        ldr     x0, [sp, #24]
 164:   8b000020        add     x0, x1, x0
 168:   f9000be0        str     x0, [sp, #16]
 16c:   f9400fe1        ldr     x1, [sp, #24]
 170:   f9400be0        ldr     x0, [sp, #16]
 174:   8b000020        add     x0, x1, x0
 178:   f9000fe0        str     x0, [sp, #24]
 17c:   52800000        mov     w0, #0x0                        // #0
 180:   a8c27bfd        ldp     x29, x30, [sp], #32
 184:   d65f03c0        ret

2.1.3 執(zhí)行完成之后棧的存放情況

ARM64函數(shù)調(diào)用流程分析,arm64,ARM64函數(shù)調(diào)用流程分析,AAPCS,棧幀使用

2.2 test_fun_a函數(shù)及其對應(yīng)的匯編程序

2.2.1 test_fun_a函數(shù)的C實現(xiàn)

void test_fun_a(long m, long n, long x, long y)
{
        long b = 2;
        long c = 3;

        printf("The current function is %s b:%ld c:%ld\r\n", __func__, b, c); 

        test_fun_b(b, c, 0, 2); 

        b = b + c + m;
        c = b + c + n;
}

2.2.2 test_fun_a函數(shù)對應(yīng)匯編及其分析

  • 0000000000000080 <test_fun_a>:test_fun_a函數(shù)的入口
  • 80: a9bc7bfd stp x29, x30, [sp, #-64]!為test_fun_a函數(shù)開棧64B,同時把X29(FP),X30(LR)保存到棧頂sp和sp + 8的棧內(nèi)存位置處
  • 84: 910003fd mov x29, sp將sp保存到x29(FP)寄存器中,相當(dāng)于FP指向棧的棧頂
  • 88: f90017e0 str x0, [sp, #40]將參數(shù)1保存到棧的sp + 40棧內(nèi)存位置處
  • 8c: f90013e1 str x1, [sp, #32]將參數(shù)2保存到棧sp + 32的棧內(nèi)存位置處
  • 90: f9000fe2 str x2, [sp, #24]將參數(shù)3保存到棧sp + 24棧內(nèi)存位置處
  • 94: f9000be3 str x3, [sp, #16]將參數(shù)4保存到棧sp + 16棧內(nèi)存位置處
  • 98: d2800040 mov x0, #0x2 // #2將test_fun_a函數(shù)的局部變量b保存到x0寄存器中
  • 9c: f9001be0 str x0, [sp, #48]將test_fun_a函數(shù)的局部變量b保存到sp + 48棧內(nèi)存位置處
  • a0: d2800060 mov x0, #0x3 // #3將test_fun_a函數(shù)的局部變量c保存到x1寄存器中
  • a4: f9001fe0 str x0, [sp, #56]將test_fun_a函數(shù)的局部變量c保存到棧sp + 56棧內(nèi)存位置處
  • a8: f9401fe3 ldr x3, [sp, #56]從棧中取出局部變量c的值放到x3寄存器中
  • ac: f9401be2 ldr x2, [sp, #48]從棧中取出局部變量b的值放到x2寄存器中
  • b0: 90000000 adrp x0, 0 <test_fun_b>將test_fun_b函數(shù)的地址加載到x0寄存器中
  • b4: 91000001 add x1, x0, #0x0 x1 = x0 + 0,其中x0保存的是test_fun_b的起始地址
  • b8: 90000000 adrp x0, 0 <test_fun_b>將test_fun_b函數(shù)的地址加載到x0寄存器中
  • bc: 91000000 add x0, x0, #0x0 x0 = x0 + 0,其中x0保存的是test_fun_b的起始地址
  • c0: 94000000 bl 0 <printf>調(diào)用函數(shù)printf
  • c4: d2800043 mov x3, #0x2 // #2給x3寄存器賦值為2,作為test_fun_b的第4個參數(shù)
  • c8: d2800002 mov x2, #0x0 // #0給x2寄存器賦值為0,作為test_func_b的第三個參數(shù)
  • cc: f9401fe1 ldr x1, [sp, #56]從棧中取出局部變量c,存放到x1寄存器,作為test_fun_b的第二個參數(shù)
  • d0: f9401be0 ldr x0, [sp, #48]從棧中取出局部變量b,存放到x0寄存器,作為test_fun_b的第一個參數(shù)
  • d4: 94000000 bl 0 <test_fun_b>調(diào)用test_fun_b函數(shù),x0 ~ x3作為test_fun_a的四個參數(shù)
  • d8: f9401be1 ldr x1, [sp, #48]從棧中取出test_fun_a的局部變量b,放到x1寄存器中
  • dc: f9401fe0 ldr x0, [sp, #56]從棧中取出test_fun_a的局部變量c,放到x0寄存器中
  • e0: 8b000020 add x0, x1, x0 c = b + c,將c的結(jié)果保存到x0寄存器中。
  • e4: f94017e1 ldr x1, [sp, #40]從棧中取出調(diào)用test_fun_a時傳入的第1個參數(shù)取出,放到x1寄存器中
  • e8: 8b000020 add x0, x1, x0 c = c + m,將計算的結(jié)果放到x0寄存器中
  • ec: f9001be0 str x0, [sp, #48]將計算的結(jié)果x0的值重新保存到局部變量b的棧內(nèi)存位置處
  • f0: f9401be1 ldr x1, [sp, #48]從棧中取出局部變量b的值放到x1寄存器中。
  • f4: f9401fe0 ldr x0, [sp, #56]從棧中取出局部變量x的值放到x0寄存器中
  • f8: 8b000020 add x0, x1, x0c = b + c
  • fc: f94013e1 ldr x1, [sp, #32]從棧中取出調(diào)用test_fun_a函數(shù)時傳入的第2個參數(shù)放到x1寄存器中
  • 100: 8b000020 add x0, x1, x0 c = c + n,計算的結(jié)果放到x0寄存器中
  • 104: f9001fe0 str x0, [sp, #56]將計算的新值存放到原局部變量c的棧內(nèi)存位置處
  • 108: d503201f nop空操作
  • 10c: a8c47bfd ldp x29, x30, [sp], #64恢復(fù)X29(FP),X30(LR)寄存器的值,同時sp = sp + 64棧指針寄存器
  • 110: d65f03c0 ret返回X30(LR)寄存器保存的返回函數(shù)處
0000000000000080 <test_fun_a>:
  80:   a9bc7bfd        stp     x29, x30, [sp, #-64]!
  84:   910003fd        mov     x29, sp 
  88:   f90017e0        str     x0, [sp, #40]
  8c:   f90013e1        str     x1, [sp, #32]
  90:   f9000fe2        str     x2, [sp, #24]
  94:   f9000be3        str     x3, [sp, #16]
  98:   d2800040        mov     x0, #0x2                        // #2   
  9c:   f9001be0        str     x0, [sp, #48]
  a0:   d2800060        mov     x0, #0x3                        // #3   
  a4:   f9001fe0        str     x0, [sp, #56]
  a8:   f9401fe3        ldr     x3, [sp, #56]
  ac:   f9401be2        ldr     x2, [sp, #48]
  b0:   90000000        adrp    x0, 0 <test_fun_b>
  b4:   91000001        add     x1, x0, #0x0
  b8:   90000000        adrp    x0, 0 <test_fun_b>
  bc:   91000000        add     x0, x0, #0x0
  c0:   94000000        bl      0 <printf>
  c4:   d2800043        mov     x3, #0x2                        // #2
  c8:   d2800002        mov     x2, #0x0                        // #0
  cc:   f9401fe1        ldr     x1, [sp, #56]
  d0:   f9401be0        ldr     x0, [sp, #48]                                                 
  d4:   94000000        bl      0 <test_fun_b>
  d8:   f9401be1        ldr     x1, [sp, #48]
  dc:   f9401fe0        ldr     x0, [sp, #56]
  e0:   8b000020        add     x0, x1, x0
  e4:   f94017e1        ldr     x1, [sp, #40]
  e8:   8b000020        add     x0, x1, x0
  ec:   f9001be0        str     x0, [sp, #48]
  f0:   f9401be1        ldr     x1, [sp, #48]
  f4:   f9401fe0        ldr     x0, [sp, #56]
  f8:   8b000020        add     x0, x1, x0
  fc:   f94013e1        ldr     x1, [sp, #32]
 100:   8b000020        add     x0, x1, x0
 104:   f9001fe0        str     x0, [sp, #56]
 108:   d503201f        nop
 10c:   a8c47bfd        ldp     x29, x30, [sp], #64
 110:   d65f03c0        ret

2.2.3 執(zhí)行完成之后棧幀的使用情況

ARM64函數(shù)調(diào)用流程分析,arm64,ARM64函數(shù)調(diào)用流程分析,AAPCS,棧幀使用

2.3 test_fun_b函數(shù)及其對應(yīng)的匯編程序

2.3.1 test_func_b函數(shù)的C實現(xiàn)

void test_fun_b(long m, long n, long x, long y)
{
        long c = 3;
        long d = 4;

        printf("The current function is %s c:%ld d:%ld\r\n", __func__, c, d); 

        c = c + d + m;
        d = c + d + n;
}

2.3.2 test_fun_b函數(shù)對應(yīng)匯編及其分析

  • 0000000000000000 <test_fun_b>:test_fun_b函數(shù)的入口
  • 0: a9bc7bfd stp x29, x30, [sp, #-64]!為test_fun_b函數(shù)開棧64B,同時把X29(FP),X30(LR)保存到棧頂sp和sp + 8的棧內(nèi)存位置處
  • 4: 910003fd mov x29, sp將sp保存到x29(FP)寄存器中,相當(dāng)于FP指向棧的棧頂
  • 8: f90017e0 str x0, [sp, #40]將參數(shù)1保存到棧的sp + 40棧內(nèi)存位置處
  • c: f90013e1 str x1, [sp, #32]將參數(shù)2保存到棧sp + 32的棧內(nèi)存位置處
  • 10: f9000fe2 str x2, [sp, #24]將參數(shù)3保存到棧sp + 24棧內(nèi)存位置處
  • 14: f9000be3 str x3, [sp, #16]將參數(shù)4保存到棧sp + 16棧內(nèi)存位置處
  • 18: d2800060 mov x0, #0x3 // #3將test_fun_b函數(shù)的局部變量c保存到x0寄存器中
  • 1c: f9001be0 str x0, [sp, #48]將test_fun_b函數(shù)的局部變量c保存到sp + 48棧內(nèi)存位置處
  • 20: d2800080 mov x0, #0x4 // #4將test_fun_b函數(shù)的局部變量d保存到x1寄存器中
  • 24: f9001fe0 str x0, [sp, #56]將test_fun_b函數(shù)的局部變量d保存到棧sp + 56棧內(nèi)存位置處
  • 28: f9401fe3 ldr x3, [sp, #56]從棧中取出局部變量d的值放到x3寄存器中
  • 2c: f9401be2 ldr x2, [sp, #48]從棧中取出局部變量c的值放到x2寄存器中
  • 30: 90000000 adrp x0, 0 <test_fun_b>將test_fun_b函數(shù)的地址加載到x0寄存器中
  • 34: 91000001 add x1, x0, #0x0x1 = x0 + 0,其中x0保存的是test_fun_b的起始地址
  • 38: 90000000 adrp x0, 0 <test_fun_b>將test_fun_b函數(shù)的地址加載到x0寄存器中
  • 3c: 91000000 add x0, x0, #0x0x0 = x0 + 0,其中x0保存的是test_fun_b的起始地址
  • 40: 94000000 bl 0 <printf>調(diào)用函數(shù)printf
  • 44: f9401be1 ldr x1, [sp, #48]從棧中取出局部變量c,存放到x1寄存器
  • 48: f9401fe0 ldr x0, [sp, #56]從棧中取出局部變量d,存放到x0寄存器
  • 4c: 8b000020 add x0, x1, x0 d = c + d,將d的結(jié)果保存到x0寄存器中。
  • 50: f94017e1 ldr x1, [sp, #40]從棧中取出調(diào)用test_fun_b時傳入的第1個參數(shù)取出,放到x1寄存器中
  • 54: 8b000020 add x0, x1, x0 d = d + m
  • 58: f9001be0 str x0, [sp, #48]將計算的結(jié)果x0的值重新保存到局部變量c的棧內(nèi)存位置處
  • 5c: f9401be1 ldr x1, [sp, #48]從棧中取出局部變量c的值放到x1寄存器中。
  • 60: f9401fe0 ldr x0, [sp, #56]從棧中取出局部變量d的值放到x0寄存器中
  • 64: 8b000020 add x0, x1, x0 c = c + d
  • 68: f94013e1 ldr x1, [sp, #32]從棧中取出調(diào)用test_fun_b函數(shù)時傳入的第2個參數(shù)放到x1寄存器中
  • 6c: 8b000020 add x0, x1, x0 c = c + n
  • 70: f9001fe0 str x0, [sp, #56]將計算的新值存放到原局部變量d的棧內(nèi)存位置處
  • 74: d503201f nop空操作
  • 78: a8c47bfd ldp x29, x30, [sp], #64恢復(fù)X29(FP),X30(LR)寄存器的值,同時sp = sp + 64棧指針寄存器
  • 7c: d65f03c0 ret返回X30(LR)寄存器保存的返回函數(shù)處
0000000000000000 <test_fun_b>:
   0:   a9bc7bfd        stp     x29, x30, [sp, #-64]!
   4:   910003fd        mov     x29, sp
   8:   f90017e0        str     x0, [sp, #40]
   c:   f90013e1        str     x1, [sp, #32]
  10:   f9000fe2        str     x2, [sp, #24]
  14:   f9000be3        str     x3, [sp, #16]
  18:   d2800060        mov     x0, #0x3                        // #3
  1c:   f9001be0        str     x0, [sp, #48]
  20:   d2800080        mov     x0, #0x4                        // #4
  24:   f9001fe0        str     x0, [sp, #56]
  28:   f9401fe3        ldr     x3, [sp, #56]
  2c:   f9401be2        ldr     x2, [sp, #48]
  30:   90000000        adrp    x0, 0 <test_fun_b>                                            
  34:   91000001        add     x1, x0, #0x0
  38:   90000000        adrp    x0, 0 <test_fun_b>
  3c:   91000000        add     x0, x0, #0x0
  40:   94000000        bl      0 <printf>
  44:   f9401be1        ldr     x1, [sp, #48]
  48:   f9401fe0        ldr     x0, [sp, #56]
  4c:   8b000020        add     x0, x1, x0
  50:   f94017e1        ldr     x1, [sp, #40]
  54:   8b000020        add     x0, x1, x0
  58:   f9001be0        str     x0, [sp, #48]
  5c:   f9401be1        ldr     x1, [sp, #48]
  60:   f9401fe0        ldr     x0, [sp, #56]
  64:   8b000020        add     x0, x1, x0
  68:   f94013e1        ldr     x1, [sp, #32]
  6c:   8b000020        add     x0, x1, x0
  70:   f9001fe0        str     x0, [sp, #56]
  74:   d503201f        nop     
  78:   a8c47bfd        ldp     x29, x30, [sp], #64
  7c:   d65f03c0        ret

2.3.3 執(zhí)行完成之后棧幀的使用情況

ARM64函數(shù)調(diào)用流程分析,arm64,ARM64函數(shù)調(diào)用流程分析,AAPCS,棧幀使用文章來源地址http://www.zghlxwxcb.cn/news/detail-670264.html

到了這里,關(guān)于ARM64函數(shù)調(diào)用流程分析的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 如何使用 docker pull 拉取特定架構(gòu)amd64、arm64、aarch64的容器鏡像

    如何使用 docker pull 拉取特定架構(gòu)amd64、arm64、aarch64的容器鏡像

    通過修改 dockerd 配置文件,并重載,可以在服務(wù)器上開啟 dockerd 的實驗屬性。為配置文件 /etc/docker/daemon.json 添加 “experimental”: true。 修改后的配置文件看起來和下面的比較像: 修改完成后,使用以下命令重置服務(wù): 在 docker pull 時指定參數(shù),即可完成指定架構(gòu)鏡像的拉取。

    2024年02月11日
    瀏覽(30)
  • X86_64函數(shù)調(diào)用匯編程序分析

    X86_64函數(shù)調(diào)用匯編程序分析

    %rdi, %rsi, %rdx, %rcx, %r8, %r9分別用于函數(shù)調(diào)用過程中的前6個參數(shù),對于6的參數(shù)存放在棧中傳遞 %rsp用做棧指針寄存器,指向棧頂 %rbp用作??蚣拇嫫鳎赶驐5?%rax用做函數(shù)返回值的第一個寄存器 2.1.1 main的C代碼實現(xiàn) 2.1.2 main函數(shù)對應(yīng)匯編及其分析 這段匯編代碼實現(xiàn)了一個簡單的

    2024年02月09日
    瀏覽(18)
  • 使用QEMU(x86)模擬運行ARM64架構(gòu)并進行內(nèi)核調(diào)試

    使用QEMU(x86)模擬運行ARM64架構(gòu)并進行內(nèi)核調(diào)試

    在 x86 上使用 QEMU 虛擬機模擬并調(diào)試 ARM64。 參考:ubuntu虛擬機中使用QEMU搭建ARM64環(huán)境 主機 ubuntu 20.04, Linux 5.16.0 QEMU emulator version 7.2.92 (v8.0.0-rc2-23-gefcd0ec14b) :qemu-7.2.29 合適的ARM64內(nèi)核源碼:linux-4.14.221.tar.gz 安裝交叉編譯工具: sudo apt-get install gcc-aarch64-linux-gnu 命令安裝以及源碼

    2024年02月09日
    瀏覽(48)
  • docker使用buildx構(gòu)建多平臺(x86,arm64)構(gòu)架鏡像

    docker目前使用版本為Server Version: 20.10.7,添加配置支持buildx docker版本較低時,請升級docker版本 有部分docker未帶有,比如arm版本,則需要單獨下載文件: 重啟docker 系統(tǒng)環(huán)境要求 如果版本較低,需要升級內(nèi)核 安裝binfmt,支持的平臺 安裝編譯時需要支持的平臺,這里選擇所有 bin

    2024年02月02日
    瀏覽(26)
  • 使用樹莓派搭建K8S集群(ARM64架構(gòu),附安裝腳本)

    使用樹莓派搭建K8S集群(ARM64架構(gòu),附安裝腳本)

    為了能夠更好的學(xué)習(xí)K8S,王道還是得自己動手 在虛擬機上玩K8S,沒啥感覺。決定挑戰(zhàn)自己,然后買了6個樹莓派,在真實的硬件上從零開始搭建部署K8S。以下內(nèi)容在自己的樹莓派集群上經(jīng)過充分驗證,沒毛病。成品如下圖: 樹莓派供電用的是帶POE功能的交換機,每一個樹莓派

    2024年02月06日
    瀏覽(22)
  • debian 11 arm64 aarch64 源碼變異winehq arm64 筆記

    debian 11 arm64 aarch64 源碼變異winehq arm64 筆記

    安裝華為畢昇編譯器 sudo apt install libc++1-13 ? 編譯tools cd tools su root export PATH=/opt/bisheng-compiler-1.3.3-aarch64-linux/bin:$PATH root@debian:/home/yeqiang/下載/src/wine/tools# ../configure CC=/opt/bisheng-compiler-1.3.3-aarch64-linux/bin/clang CXX=/opt/bisheng-compiler-1.3.3-aarch64-linux/bin/clang++ --host=aarch64-unknown-linux --wi

    2024年01月16日
    瀏覽(23)
  • 【ARM64 常見匯編指令學(xué)習(xí) 16 -- ARM64 SMC 指令】

    上篇文章:ARM64 常見匯編指令學(xué)習(xí) 15 – ARM64 標(biāo)志位的學(xué)習(xí) 下篇文章:ARM64 常見匯編指令學(xué)習(xí) 17 – ARM64 BFI 指令 在ARMv8架構(gòu)中,同步異常主要包括以下幾種: Undefined Instruction :未定義指令異常,當(dāng)處理器嘗試執(zhí)行一條未定義的指令時會觸發(fā)。 Supervisor Call (SVC) :這是一種特殊

    2024年02月13日
    瀏覽(52)
  • 記錄MacOS M1芯片(ARM64架構(gòu))使用docker-compose方式部署Kafka

    記錄MacOS M1芯片(ARM64架構(gòu))使用docker-compose方式部署Kafka

    amd架構(gòu)的鏡像非常好找,但由于博主是arm64架構(gòu)的機器,所以一些開發(fā)環(huán)境非常的難找,所以在這里記錄一下arm64環(huán)境部署Kafka。 準備 docker-compose.yml 文件: 博主的虛擬機IP是192.168.153.131,注意替換你的服務(wù)器IP。 這個文件部署了zookeeper、kakfa以及kafkaUI 在docker-compose.yml目錄下,

    2024年02月15日
    瀏覽(24)
  • electron 使用electron-packager打linux-x64包與linux-arm64包,解決打包緩慢問題

    electron 使用electron-packager打linux-x64包與linux-arm64包,解決打包緩慢問題

    使用electron-packager打linux-x64包與linux-arm64包,解決下載zip打包緩慢問題 在使用electron-packager打包的過程中,需要在第一次下載electron版本對應(yīng)的zip文件,下載很緩慢,而且還可能出現(xiàn)每次都在下載zip的情況 解決思路是提前下載好zip文件并修改electron—packager源碼將zip的路徑指定到

    2024年02月16日
    瀏覽(20)
  • mac m1芯片 pycharm使用etree報錯:incompatible architecture(have ‘x86_64‘, need ‘a(chǎn)rm64e‘)

    mac m1芯片 pycharm使用etree報錯:incompatible architecture(have ‘x86_64‘, need ‘a(chǎn)rm64e‘)

    背景: 相同的代碼,在同事mac電腦上運行正常,自己電腦會報錯。自己電腦上的相關(guān)信息: mac m1 芯片,使用homebrew安裝python3.9 pycharm配置虛擬環(huán)境,使用homebrew安裝的python 運行 from lxml import etree報錯: mach-o file, but is an incompatible architecture (have \\\'x86_64\\\', need \\\'arm64e\\\') [如圖所示] 【

    2024年02月10日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包