顯示具有 qemu 標籤的文章。 顯示所有文章
顯示具有 qemu 標籤的文章。 顯示所有文章

2019年1月27日 星期日

OrangeOS's 作業系統實現範例出現微軟防毒Defender的誤偵測





年關將近,最近繼續在整理舊書,偶然間翻到了一本放了很久的舊書 OrangeOS's 一個作業系統的實現。

在Windows 10 系統中,想試試它的範例,發現 a.img 檔案複製不過來,覺得十分奇怪。

突然跳出病毒移除警告,微軟的防毒軟體偵到 Trojan: DOS/Killmbr。


出現的路徑剛好是範例1的Hello World boot.asm 所對應的檔案 a.img

程式碼

原本的測試範例沒有Makefile, 筆者寫了一個測試用的Makefile 以方便在Ubuntu 16.04.4 重覆編譯

編譯測試檔案
/Dev/orangeos/chapter1/a$ make
qemu-img create -f raw a.img 1440k
Formatting 'a.img', fmt=raw size=1474560
mkfs.msdos -s 1 a.img
mkfs.fat 3.0.28 (2015-05-16)
nasm boot.asm -f bin -o boot.bin
dd if=boot.bin of=./a.img bs=512 count=1
1+0 records in
1+0 records out
512 bytes copied, 0.000185582 s, 2.8 MB/s


被偵測到有問題的boot.asm 範例


 org 07c00h
 mov ax, cs
 mov ds, ax
 mov es, ax
 call DispStr
 jmp $
DispStr:
 mov ax, BootMessage
 mov bp, ax
 mov cx, 16
 mov ax, 01301h
 mov bx, 000ch
 mov dl, 0
 int 10h
 ret
BootMessage:  db "Hello, OS world!"
times  510-($-$$) db 0
dw  0xaa55


通Defender 偵測的 boot.asm 範例

測試 ghaiklor 的 Simple boot sector with Hello World 範例編譯沒有問題
source: https://gist.github.com/ghaiklor/89e243a3463569480d01188c9e55e077





執行編譯OK的Hello World 

Windows 10 pro with qemu / make tools installed by choco


小結

比較程式的差異,通Defender 偵測的 boot.asm 範例,是比較好的寫法,有做處理停止中斷及結束。
看到偵測有病毒檔案訊息,先不用緊張,確認問題點,調整一下寫法,就可避開 Defender 誤偵測,繼續快樂的作業系統程式開發與研究囉!

2011年10月1日 星期六

ARM Linux 開發環境設定指南

debian-arm-booting 
最近在工作上,需要用到ARM相關平台,所以花時間研究 ARM CPU 架構的開發環境,
其中硬體商(目前開發板:Friendly ARM Tiny6410)提供的部分程式必須在Windows 上才可執行。
故筆者想能不能在windows 及ubuntu-linux 中,也可各有一個模擬arm 的開發平台,可直接編譯程式而不需要使用cross-compiler(簡言之,如在windows平台上,使用ARM虛擬機器編譯arm執行檔)。
經過搜尋網上資料後,發現有一套件debian armel可供使用,且很貼心的提供可利用qemu arm來直接載入使用,大大減少重新編譯的時間。

設定步驟


安裝QEMU
下載debian-armel
檔案所在位置:http://people.debian.org/~aurel32/qemu/armel/
 a3853606c5762d41bb245aaeb8823996  debian_lenny_armel_desktop.qcow2
  dce9f0d2855d57b79b63bcf3a9ecd51d  debian_lenny_armel_standard.qcow2
  a6d0dde54fb27254e2b8d94736889462  initrd.img-2.6.26-2-versatile
  1969e2a0ffc571ccf6024dc7c842d4dd  vmlinuz-2.6.26-2-versatile
  c5f9039b463e07852055071ac118320a  debian_squeeze_armel_desktop.qcow2
  b7807306c4c79aaa9a423119f4633ffb  debian_squeeze_armel_standard.qcow2
  f73e83b8e48bd422457dafeb8afe7fc6  initrd.img-2.6.32-5-versatile
  8b33324f99d13dc71d6ad060db2fd60a  vmlinuz-2.6.32-5-versatile

筆者所使用的檔案組合如下表:
下載檔案說明
initrd.img-2.6.32-5-versatile初始化並啟動附加檔案
vmlinuz-2.6.32-5-versatile系統啟動用linux 核心
debian_squeeze_armel_standard.qcowdebian squeeze 標準系統映像檔(可寫入更新資料)


執行debian arm linux
開機完成後,預設登入帳號及密碼皆為root。
debian-arm-login

執行腳本檔
此腳本用來執行debian-armel,及相關必要參數。
run.sh
#!/bin/sh
export PATH="$PATH:/usr/local/qemu/bin"
PLATFORM="`uname -s | cut -d'_' -f1`"
QEMUEXE="qemu-system-arm"
if [ "$PLATFORM" = "CYGWIN" ] ; then
    QEMUEXE=${QEMUEXE}.exe
fi
img=debian_squeeze_armel_standard.qcow2
$QEMUEXE -M versatilepb  -kernel vmlinuz-versatile -initrd initrd.gz -m 256 -hda $img -append 'root=/dev/sda1' -redir tcp:2200::22

使用腳本檔案前用先將,下列檔案更名:

  • initrd.img-2.6.32-5-versatile  改為 initrd.gz
  • vmlinuz-2.6.32-5-versatile 改為 vmlinuz-versatile

進入到run.sh 所在目錄,並執行下列腳本檔

sh run.sh

註一:當在使用apt-get install gcc g++ 時,發生找不到檔案的情形。
解決方法: apt-get update –fix-missing
註二:因為qemu 網路架構原設計,需使用-redir 參數用來將Guest OS(debian-arm) 的ssh 22 port 轉到本機2200port。(記得debian-arm中,執行 apt-get install openssh-server來安裝ssh server)

結論
當筆者完成所有步驟後,等於擁有一台虛擬ARM機器,且為一包含完整開發軟體的LINUX系統。
若網友們所寫的程式無特別額外ARM硬體需求,則可直接在上面開發偵錯,可減少arm程式複製到arm 板子上的時間。

2011年8月23日 星期二

在Mac OS X上編繹BenOS並使用Qemu執行

bos_run_at_osx

續上篇自製開發BenOS支援Windows+Cygwin後,發現Mac上的使用者(當然筆者也是其中之一,不才也是半個蘋果迷)也想能直接編繹(另一個原因是,不想再開另一個Linux 虛擬機,太耗資源及電力,環保一下吧),於是乎有了這篇文章。

編繹環境設定

筆者的Mac 是Snow Leopard 10.6.8

1. 安裝Xcode

http://developer.apple.com/下載並安裝Xcode (筆者用的是4.0.2)

2. 安裝HomeBrew

請參考把常用的UNIX 環境重建到MAC OS X (1) 一文。

3. 使用brew 安裝 nasm 和qemu

sudo brew install nasm qemu git

4.安裝cross gcc

測試使用Xcode 的gcc,並發現不能做完整靜態連結。也不能輸出ELF檔案。

正想把最後殺手鐧拿來,自己編繹gcc時,心血來潮google 一下,

發現下列的站台,有專門編繹給Mac OS X,二話不說,馬上拿來用,節省不少時間。

可從此處下載http://crossgcc.rts-software.org/doku.php

dmg 安裝至目錄

gcc-4.5.2-for-linux32.dmg (65.2 MB)

/usr/local/gcc-4.5.2-for-linux32/
gcc-4.5.2-for-linux64.dmg (71.7 MB) /usr/local/gcc-4.5.2-for-linux64/

筆者安裝是64位元版,但在編繹時需要加上-m32, 因為目前bos 尚未相容64位元模式。

5. 安裝mtools

在編繹過程,只有一個小問題,便是找不到iconv,極可能是script 的bug,加上-liconv,即可通過編繹。

另外為求保險,去除不必要的變數,故加上-arch i386,產生mtools i386 版。

env CFLAGS="-arch i386" LDFLAGS="-arch i386 -liconv" ./configure
make
sudo make install

結語

如此一來,便可在OSX上編繹及執行,可參考開頭畫面。

再則,感謝google 大神,讓我能省去編繹 toolchain時間。相對windows 來說,Mac OS X 對Unix-like開發者,較為友善。

然後,到本文筆者便寫完三個主要平台的OS開發環境Linux、Windows、OSX上設定。

希望對大家有所幫助,少走一彎路。

最後,筆者因為以前工作屬工友級,所以需要什麼,就學什麼。

想請問大家最常使用什麼平台和工具來進行程式開發呢?

說不定有更好的組合提高您的生產力;一人技窮,二人技長;快提出來大家討論,集思廣益吧。

註一:下次的大聚會9/6,有重量級的OS長老駕到,可來吸收一甲子功力,請大家踴躍參加。

註二:此次9/6活動已加入TOSSUG行程(請參閱http://www.tossug.org/2011)

2011年5月25日 星期三

精簡版作業系統實戰: 自製OS用Qemu執行

源起一直以來想自己寫一個OS,練練功,去年到今年斷斷續續花了一至兩個月時間,寫了 我自己的陽春作業系統,最近正在整理程式碼做個記錄;證明有達成自己的目標。以下是從我的Xubuntu 10.10 執行benos 使用QEMU的畫面截圖。

qemu-system-x86_64 -boot a -M pc-0.11 -fda /home/ben/osdev/../main.img


畫面左上為Ben OS 執行結果。

目前實作了下列功能:

  1. 簡易的記憶體管理

  2. Timer中斷處理

  3. 鍵盤I/O, 佇列

  4. 多個執行緒的多工切換

  5. 簡單的命令模式 (ps, uname, free, clear, type mem)

  6. 精簡 libc 函式庫
在寫自己小OS過程中,最痛苦的莫過於不知道為什麼OS又沒畫面了。開發期間,學習了不少以前觀念有些模糊的部分,例如:如何進入保護模式、程式執行期權限模式、記憶管理、多工處理等等。
之後可能的研究議題如下:
  • 如何編繹及改寫BenOS支援網路開機方式(PXE)?

  • 如何支援檔案系統從S-ATA 硬碟?
如果想寫自己的OS,如何開始呢?
首先在完全沒有基礎情況,起步是最難的。
其實坊間有多本自製OS的書,以下是本人看過書:
- 偏重Linux 0.01 相關觀念介紹
- 較不適合初學者
- 偏重圖形介面實作,且用到許多自制工具或其他工具
- 較適合進階網友
- 比較全面詳細介紹觀念細節
- 較適合初學者
作業系統開發實戰手冊:以開發一個視窗多工作業系統為例(2011.5)
- 圖形介面實作
- 提供多平台的開發
- 使用大量表格來對照行號,進行解說。
再來最常遇到就是卡關,卡在某一環節良久,無法解決。這時如果有人可以討論,相信情況會大為改善。
wiki at osdev.org裡有英文文章,如英文尚可考慮精讀,有很多初學者的參考文章。
另外在Jserv's CURT v1 ARM 精簡作業系統一文中,Jserv 留言說有熱心網友將CURT v1移植到i386平台,可供大家參考練習。以上一點淺見,希望對您有所幫助。

更新2011-07-22:
建立共筆用的站台:Julu 作業系統開發協作平台,有興趣的人可留言(改到社群論壇,詳參閱協作平台),歡迎一同編修內容。

更新2011-08-17:

更新2011-12-14
BOS 使用新的bootloader(By Dennis) 以及初步整合VFS(By Wayling) 

2011年4月20日 星期三

讀"Orange's 一個作業系統的實現"的心得

前一陣子花時間看這本書,
這本算是滿適合新手入門的書,
很多觀念說明很清楚,不過要讀本書;還是需要一些基礎:
1.略懂組合語言
使用NASM,作為一些低階操作。
2.C 語言 (絕大部分程式使用。)
3.略懂環境Shell,Gnu Make
Windows 批次檔
Linux: Bash or Csh 等等

從環境設定,到Boot 流程、多執行序、記憶體、檔案系統的實作等等,
許多重要的OS元素均有詳細的介紹。

這本書環境設部分,很貼心的介紹了Linux 及windows 開發環境的設定。
對於不習慣使用Linux的讀者提供另一種選擇。

本人習慣使用Linux 環境,所以電腦環境如下:
OS: XUbuntu 10.10 , 桌面:Xfce
Tool: gcc 4.4.5, GNU Make 3.81, Bash 4.1.5, qemu 0.12.5
Editor: vim + ctags + cscope

一邊看書,一邊利用範例修改編繹,讓自己更容易瞭解,來龍去脈。
其實研究OS的原理,可讓自己更知道系統如何運作,加強自己的功力喔!!!
有空不妨看看!!!

2010年1月25日 星期一

在蘋果電腦上執行 qemu (MAC OS X)

QEMU 為一開放源始碼的虛擬機器模擬器。

若是使用Snow leopard(MAC OS X 1.0) 以上的網友可考慮使用, homebrew.
   ==>請參考 把常用的UNIX 環境重建到MAC OS X 一文

如尚未安裝Darwin Ports, 請至  http://www.macports.org/  下載符合系統的版本進行安裝。


接著你可執行port 安裝qemu,過程如下述:
$ sudo port install qemu

Password:

You will then be prompted for your root password, which you should enter. You may have to wait for a few minutes while the software is retrieved from the network and installed for you. Y ou should see something that looks similar to:

---> Fetching qemu
---> Verifying checksum for qemu
---> Extracting qemu
---> Configuring qemu
---> Building qemu with target all
---> Staging qemu into destroot
---> Installing qemu

(註:當上述指令執行中,請勿關閉終端機(Terminal)。)
安裝完成後,你可用下述指令得到qemu 更詳細的資訊
$ man qemu
$ apropos qemu
$ which qemu
$ locate qemu

預設安裝好qemu, 並不包含 arm 的執行檔
若需要其他的處理器(processors)的支援可用下述指令進行安裝:

$ sudo port install +target_arm qemu

你可用 sudo port variants qemu 查詢可能目標處理器支援。
範例如下:
VMLeopard:~ ben$ port variants qemu

qemu has the variants:
target_arm: add arm target support
target_cris: add cris target support
target_m68k: add m68k target support
target_mips: add mips target support
target_mips64: add mips64 target support
target_mips64el: add mips64el target support
target_mipsel: add mipsel target support
target_ppcemb: add ppcemb target support
target_sh4: add sh4 target support
target_sh4eb: add sh4eb target support
target_sparc: add sparc target support
universal: Build for multiple architectures

參考資訊