arm64多核cpu啟動流程
arm64使用acpi parking protocol specification
bp核:
start_kernel//開始初始化核心需要的全域性變數,硬體資源等
-> setup_arch
-> setup_processor
-> cpu_init //設定irq堆疊
-> rest_init //在最後啟動其他核
-> kernel_thread(kernel_init, null, clone_fs);
kernel_init
-> kernel_init_freeable();
-> smp_init
-> cpu_up()
-> _cpu_up()
-> __cpu_up()
-> boot_secondary
-> cpu_ops[cpu]->cpu_boot(cpu);
-> try_to_run_init_process("/sbin/init")
-> run_init_process
-> do_execve
-> try_to_run_init_process("/etc/init")
-> try_to_run_init_process("/bin/init")
const struct cpu_operations smp_parking_protocol_ops = ;
cpu_ops[cpu]->cpu_boot(cpu); 呼叫了 smp_parking_protocol_cpu_boot,
smp_parking_protocol_cpu_boot
-> writeq(__pa(secondary_entry), &mailbox->entry_point);
secondary_entry
-> secondary_startup
-> __secondary_switched
-> secondary_start_kernel //正式啟動下乙個cpu,ap核
arm64入棧出棧 棧 ARM64
棧 棧 是一種具有特殊的訪問方式的儲存空間 後進先出,last in out firt,lifo sp和fp暫存器 sp暫存器在任意時刻會儲存我們棧頂的位址.fp暫存器也稱為x29暫存器屬於通用暫存器,但是在某些時刻我們利用它儲存棧底的位址 注意 arm64開始,取消32位的 ldm,stm,pus...
ARM64除錯環境
自從上一次zctf做了一道arm64的逆向題目後,我決定記錄下利用qemu搭建arm64的環境的過程,以後肯定會遇到更多arm平台下的reverse和pwn。我要模擬的是64位的arm環境,所以需要使用的是qemu system aarch64。在kali下,使用apt get install qe...
arm64 頁表對映
armv8最多支援48根位址,4級頁表,這樣最多支援user space和kernnel space 分別是256tb 其中user space佔據低端位址 kernel可以支援48 42 39 根位址 config arm64 va bits 39 is not set config arm64 ...