原创 qemu中反轉比較與交換比較操作數方法

 首先將各種比較操作以枚舉形式定義: typedef enum {     TCG_COND_EQ,     TCG_COND_NE,     TC

原创 識人五法

戰國時期的李克提出了識人五法,居視其所親,富視其所與,達視其所舉,窮視其所不爲,貧視其所不取。即:第一,居視其所親。看一個人平常都與誰在一起,親近哪些人,如與賢人親,則可重用,若與小人爲伍,就要當心;第二,富視其所與。看一個人如何支配自己

原创 Eclipse CDT Hello World工程makefile分析

1. 工程文件分析 使用eclipse新建一個Hello World工程,假設工程名稱是hello,此時eclipse在工程目錄下新建了一個名爲hello的文件夾: hello/     .cproject     .project   

原创 Eclipse CDT生成、調用C動態庫

(一) 生成動態庫 1 創建動態庫工程 File->New->Project->CProject->選擇Shared Library,工程命名爲test。   2 創建源代碼文件 File->New->Source File,指定名稱爲t

原创 人情之隱

【原文】   王敦既死,王含欲投王舒。其子應在側,勸含投彬。含曰:“大將軍平素與彬云何,汝欲歸之?”應曰:“此乃所以宜投也。江州[彬]當人強盛,能立異同, 此非常識所及。睹衰危,必興慈愍。荊州[舒]守文,豈能意外行事耶?”含不從,徑投舒

原创 OPERAND-SIZE和ADDRESS-SIZE屬性

當處理器在保護模式下執行時,每一個代碼段都具有默認的OPERAND-SIZE和ADDRESS-SIZE屬性。這些屬性通過segment descriptor中的D flag確定,當D flag爲1時,OPERAND-SIZE和ADDRES

原创 __thread, __typeof__與逗號表達式

1 __thread修飾符 約束變量的生存期只在一個線程中,線程停止時變量也被銷燬。它提供了一種簡單的方式來保證線程安全,多線程訪問時不需要關注競爭

原创 RAMBlock之file_ram_alloc

在linux下,分配RAMBlock時可以將內存塊映射到文件中,詳細內容可見file_ram_alloc函數,下面是該函數的主要部分: static void *file_ram_alloc(RAMBlock *block,      

原创 ubuntu man安裝

Linux提供了豐富的幫助手冊,當你需要查看某個命令的參數時不必到處上網查找,只要man一下即可。 Linux 的man手冊共有以下幾個章節: 1、Standard commands (標準命令) 2、System calls (系統調用

原创 動態翻譯代碼異常時目標CPU狀態恢復

動態翻譯器執行時如果出現異常,可如何確定異常位置對應的目標位置呢? 首先,執行語句: tb = tb_find_pc(pc); 其中pc表示異常出現時宿主PC值,如果返回的tb不爲NULL,則說明異常發生在動態翻譯代碼執行時。 爲了恢復目

原创 softmmu同構函數的定義

在qemu的softmmu代碼中,有很多函數它們的功能是相似的,只是處理的數據類型不同,這裏我姑且稱之爲“同構”函數。如果爲它們分別編寫函數體,代碼量及維護工作量會增加數倍,以softmmu_defs.h文件中聲明的函數爲例,共聲明瞭16

原创 編譯器對程序的優化過程

編譯器的優化過程: 優化過程是所謂的“NP完全問題(NP-complete problem)”複雜度理論的例子。但現代的優化程序並不嘗試完全的可能,只是用啓發式和案例型算法來確定機器碼應採取的轉換過程。 最好不要使用goto語句,goto

原创 QEMU模塊構造

QEMU模塊構造 #define module_init(function, type)                              

原创 QEMU分頁機制分析

1 qemu頁面層次劃分 qemu通過定義一些宏靈活地進行分頁,首先由宏TARGET_PAGE_BITS(12)確定頁的大小,然後根據目標機的物理地址空間和宿主機的字長確定P_L1_BITS和V_L1_BITS,從而使得剩餘部分可以被L2

原创 ubuntu上安裝eclipse CDT

1 在www.eclipse.org上下載Eclipse IDE for C/C++ Developers (includes Incubating components) 2 根據安裝的ubuntu確定下載linux-32或linux-