欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

hypervisor的調(diào)試分析方法

我快閉嘴 ? 來源:嵌入式ARM和Linux ? 作者:嵌入式ARM和Linux ? 2022-10-08 09:40 ? 次閱讀

我們在編寫裸機程序(baremetal)、虛擬化管理程序(hypervisor)和操作系統(tǒng)(OS)時,Debug分析程序是必不可少的。不像linux內(nèi)核,有大量的調(diào)試方法,很多裸機程序、hypervisor沒有完善的調(diào)試分析方法。

異常相關寄存器

但也不是無計可施,在硬件上,ARM架構為程序的異常行為提供了詳細的寄存器:

ESR_ELx寄存器(x=1,2,3)

保存發(fā)生異常時的特征,比如異常分類(ESR_ELx.EC)、異常具體原因(ESR_ELx.ISS)等。

ELR_ELx寄存器(x=1,2,3)

保存發(fā)生異常時,保存要返回的地址,一般情況下就是發(fā)生異常時的指令地址。

FAR_ELx寄存器(x=1,2,3)

保存錯誤地址。

HPFAR_EL2寄存器

保存stage-2階段的地址轉換發(fā)生的錯誤IPA地址。

ARM從硬件架構上設計了4層異常級:EL0、EL1、EL2和EL3。不同特權等級的程序,運行在不同的異常級上。本文從hypervisor虛擬機管理程序的角度,講解如何利用這些寄存器,對程序的異常情況進行分析。

hypervisor本身的abort異常

我們以meta-hypervisor出現(xiàn)的具體異常為例:

esr_el2=0x97010046
elr_el2=0xfd8000005880
far_el2=0xfd8000005880

在這兒,esr_el2的值為0x97010046,對應的位域為:

EC IL ISS
100101 1 1_0000_0001_0000_0000_0100_0110

EC = 100101:

說明是數(shù)據(jù)abort異常,但是沒有發(fā)生異常級改變(EL2);或者,當支持嵌套虛擬化時與VNCR_EL2相關的訪問產(chǎn)生的數(shù)據(jù)abort異常。

ISS編碼(數(shù)據(jù)abort異常的具體原因)

ISV SAS SSE SRT SF AR VNCR LST FnV EA CM S1PTW WnR DFSC
24 23-22 21 20-16 15 14 13 12-11 10 9 8 7 6 5-0
1 00 0 00001 0 0 0 00 0 0 0 0 1 000110

通過上面各個位域的信息,綜合得出:把W1寄存器中一個字節(jié)的數(shù)據(jù)寫入內(nèi)存時發(fā)生的錯誤。

我們再來看匯編代碼中,0xfd8000005880地址處的內(nèi)容:

void *memset(void *dest, uint32_t c, uint32_t count)
{
    // ......省略
        *d = c;
    fd8000005874:   b94007e0    ldr w0, [sp, #4]
    fd8000005878:   12001c01    and w1, w0, #0xff
    fd800000587c:   f9400fe0    ldr x0, [sp, #24]
    fd8000005880:   39000001    strb    w1, [x0]
        d++;
    fd8000005884:   f9400fe0    ldr x0, [sp, #24]
    fd8000005888:   91000400    add x0, x0, #0x1
    fd800000588c:   f9000fe0    str x0, [sp, #24]
}

代碼中,fd8000005880: 39000001 strb w1, [x0]確實是往x0寄存器中的地址寫入一個字節(jié)。這正好與我們對異常原因分析的結果相同。說明異常正是memset函數(shù)發(fā)生的錯誤。

ISV: 1, 說明23-14位保存著合法指令的異常信息

SAS: 00, 說明訪問字節(jié)數(shù)據(jù)時產(chǎn)生的錯誤

SSE: 0, 字節(jié)訪問不要求符號擴展

SRT: 00001,錯誤指令的Wt/Xt/Rt操作數(shù)的寄存器編號

SF: 0, 指令訪問的是32位通用寄存器

AR: 0, 指令沒有aquire/release語義

VNCR:0, 保留

LST: 00, 產(chǎn)生abort異常的指令未指定

FnV: 0, FAR寄存器是合法的

EA: 0, 表示不是外部abort

CM: 0, 表示錯誤不是由cache維護指令產(chǎn)生的

S1PTW: 0, 表示不是stage-2錯誤

WnR: 0, 表示寫內(nèi)存

DFSC:000110,L2地址翻譯錯誤

如果memset函數(shù)只有一處調(diào)用的話,Bug原因結合代碼就很容易分析出來了。但是,我們自己編寫的hypervisor中有很多處調(diào)用memset函數(shù)的地方。所以,就文中的bug示例而言,目前還不能分析出原因。所以,我們需要使用qemu模擬器,通過gdb進行單步調(diào)試,看看出問題的代碼位置(參見下一篇《QEMU+GDB調(diào)試ARM程序》)。

Guest OS的abort異常

我們設計的hypervisor支持Guest OS觸發(fā)的4類異常,具體定義如下:

abort_handler_tabort_handlers[64]=
{
[ESR_EC_DALEL]=aborts_data_lower,
[ESR_EC_SMC64]=smc64_handler,
[ESR_EC_SYSRG]=sysreg_handler,
[ESR_EC_HVC64]=hvc64_handler
};

ESR_EC_HVC64 = 0x16:用于處理Guest OS發(fā)起的HVC調(diào)用,我們設計使用HVC指令在VM之間建立通信。

ESR_EC_SMC64 = 0x17:用于處理Guest OS發(fā)起的SMC調(diào)用,我們知道ARM規(guī)定了PSCI規(guī)范,通過將電源管理等代碼在ATF代碼中實現(xiàn),這樣就實現(xiàn)了資源的安全管理。PSCI規(guī)范的底層就是通過SMC指令實現(xiàn)的。hypervisor需要將Guest OS發(fā)起的虛擬核的PSCI調(diào)用轉發(fā)給物理核。

ESR_EC_SYSRG = 0x18:模擬寄存器和外設。因為Guest OS需要訪問一些特殊寄存器和外設,而外設有時候需要多個VM共享,hypervisor對其進行模擬。

ESR_EC_DALEL = 0x24:用于處理Guest OS發(fā)生的abort異常。比如,Guest OS訪問我們未指定的物理內(nèi)存。

對于ESR_EL2寄存器的分析,與前面的一段一樣,不在具體詳述。

而HPFAR_EL2寄存器保存著出錯的IPA地址,通過該地址,我們就可以知道,Guest OS訪問哪塊內(nèi)存出錯,就能解決某些bug了。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • ARM
    ARM
    +關注

    關注

    134

    文章

    9179

    瀏覽量

    369400
  • 寄存器
    +關注

    關注

    31

    文章

    5369

    瀏覽量

    121264
  • Linux
    +關注

    關注

    87

    文章

    11351

    瀏覽量

    210490

原文標題:ARM深入理解-hypervisor調(diào)試方法一(異常寄存器分析)

文章出處:【微信號:嵌入式ARM和Linux,微信公眾號:嵌入式ARM和Linux】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    QEMU+GDB調(diào)試ARM程序

    通過GDB調(diào)試代碼的便利性無需贅言。我們直接以調(diào)試meta-hypervisor為示例進行說明。
    的頭像 發(fā)表于 10-08 09:17 ?3009次閱讀

    電源管理入門:Hypervisor中的電源管理

    很多時候聽說Hypervisor,但是對底層軟件技術不了解的人感覺挺神秘。本篇文章簡單介紹下Hypervisor的基本概念,另外介紹下電源管理在Hypervisor之上多OS間怎么應用。
    的頭像 發(fā)表于 12-06 09:27 ?1621次閱讀
    電源管理入門:<b class='flag-5'>Hypervisor</b>中的電源管理

    學習hypervisor嵌入式產(chǎn)品安全設計

    第一部分(第1~2章)介紹Hypervisor基礎,涵蓋虛擬化技術與實現(xiàn)、主流的嵌入式Hypervisor產(chǎn)品,以及基于分離內(nèi)核的嵌入式Hypervisor等內(nèi)容。第二部分(第3~12章)介紹嵌入式
    發(fā)表于 08-25 09:11

    【「嵌入式Hypervisor:架構、原理與應用」閱讀體驗】+第一二章讀后感

    非常感謝社區(qū)提供的閱讀機會,拿到書后,就迫不及待的的開始閱讀了。 社區(qū)還有簽名留念呢,值得紀念。 《嵌入式Hypervisor:架構、原理與應用》的第一、二章為讀者提供了關于Hypervisor技術
    發(fā)表于 10-09 18:22

    【「嵌入式Hypervisor:架構、原理與應用」閱讀體驗】+第三四章閱讀報告

    保證系統(tǒng)實時性的同時,提供強大的虛擬化支持。 功能特性 :深入分析了PRTOS Hypervisor的功能特性,如虛擬機管理、資源調(diào)度、安全隔離等。這些特性使得PRTOS Hypervisor能夠滿足
    發(fā)表于 10-09 18:29

    【「嵌入式Hypervisor:架構、原理與應用」閱讀體驗】+全文學習心得

    景和需求,選擇合適的特性和策略,以實現(xiàn)最佳的系統(tǒng)性能和資源利用率。 三、實際應用與案例分析 在書籍的后半部分,我深入學習了嵌入式Hypervisor在各個領域中的實際應用和案例分析。這些領域包括物聯(lián)網(wǎng)
    發(fā)表于 10-09 19:11

    【「嵌入式Hypervisor:架構、原理與應用」閱讀體驗】+ 了解Hypervisor

    正值舉國歡度國慶佳節(jié)之際,我收到了《嵌入式Hypervisor:架構、原理與應用》一書,在此感謝電子發(fā)燒友論壇!當初申請評測此書之時,我根本就不知道這個Hypervisor是什么,只是看到有嵌入式
    發(fā)表于 10-13 16:47

    【「嵌入式Hypervisor:架構、原理與應用」閱讀體驗】+ Hypervisor應用場景調(diào)研

    繼續(xù)研讀《嵌入式Hypervisor:架構、原理與應用》,想搞清楚Hypervisor的具體應用場景,是否能用于我們的嵌入式產(chǎn)品設計。 通過閱讀“Hypervisor類型和產(chǎn)品”一節(jié),知道了
    發(fā)表于 10-14 11:21

    解密ACRN:一個專為物聯(lián)網(wǎng)而設計的Hypervisor

    解密 ACRN:一個專為物聯(lián)網(wǎng)而設計的 Hypervisor
    發(fā)表于 05-05 13:47

    嵌入式Hypervisor的相關資料分享

    https://blog.csdn.net/bbc955625132551/article/details/71597863“hypervisor 的核心要素之一是頁映射器,它將硬件指向特定操作系統(tǒng)
    發(fā)表于 11-09 07:58

    怎樣通過波形分析方法調(diào)試UART收發(fā)呢

    首先對UART數(shù)據(jù)波形進行分析:本文通過對一步串行數(shù)據(jù)格式的分析,闡述通過波形分析方法調(diào)試UART收發(fā)原理和
    發(fā)表于 01-24 08:18

    Enea推出實現(xiàn)系統(tǒng)整合技術Enea Hypervisor

    Enea推出實現(xiàn)系統(tǒng)整合技術Enea Hypervisor Enea最新推出的Enea Hypervisor使Enea公司多核技術得到了進一步拓展。Enea Hypervisor (在多核處理器上實現(xiàn)了多元高性能計算環(huán)境的構建
    發(fā)表于 03-19 14:04 ?856次閱讀

    Enea Hypervisor技術培訓簡化多核開發(fā)過程

    Enea Hypervisor技術培訓簡化多核開發(fā)過程 Enea公司最新推出的Enea Hypervisor使Enea公司多核技術得到了進一步拓展。Enea Hypervisor (www.enea.com/
    發(fā)表于 03-22 10:12 ?603次閱讀

    嵌入式Hypervisor了解

    https://blog.csdn.net/bbc955625132551/article/details/71597863“hypervisor 的核心要素之一是頁映射器,它將硬件指向特定操作系統(tǒng)
    發(fā)表于 11-03 20:36 ?3次下載
    嵌入式<b class='flag-5'>Hypervisor</b>了解

    虛擬化概述,Hypervisor簡介

    主操作系統(tǒng)內(nèi)嵌Hypervisor擴展,一般稱為Type2 Hypervisor,基本管理功能可以通過主機操作系統(tǒng)實現(xiàn),Hypervisor擴展只專注于虛擬化支持,與主機操作系統(tǒng)配合實現(xiàn)虛擬化功能。這類
    的頭像 發(fā)表于 09-09 15:03 ?8401次閱讀