發表文章

Tesla CEO Elon Musk打電動嗎?

從Elon Musk的twitter 跟Reddit AMA (ask me anything)看來,Elon Musk是會打電動的, 會玩大亂鬥,魔獸爭霸,文明帝國與一些射擊動作類的遊戲。  原文網址: https://www.businessinsider.com/elon-musk-favorite-video-games-2017-6#8-warcraft-8

如何使用MQTT-Reactive打造Event-driven programming系統

本文是利用 MQTT-Reactive  開發reactive 系統的教學,MQTT在許多的IoT產品上很常用到, 文章裡教大家如何在IoT應用裡有系統的加入MQTT-Client 。 原文連結: https://www.embedded.com/implementing-an-mqtt-client-for-reactive-systems/

CMU buffer overflow attack作業筆記

圖片
三年前線上課程看到的,現在有空筆記一下,這是CMU的計算機組織課程的作業( https://www.cs.cmu.edu/~213/index.html ),應該是大二的課程。 作業可以在這邊載到( http://csapp.cs.cmu.edu/3e/labs.html ) 須要在x86–64的機器上執行.  作業給了一個有buffer overflow問題的程式bomb跟其原始碼bomb.c, 依難度大概有下面幾個層級 1.函數返回時利用buffer overflow去呼叫另一個不帶參數函數 2.函數返回時利用buffer overflow去呼叫另一個帶參數函數 3.利用buffer overflow去修改全域變數 4.最難的是利用buffer overflow去執行一段自己插入的程式(機器碼),然後要正常返回呼叫函數。 預備知識: 首先,先看x86–64 架構有什麼registers ,這邊 %rip:instruction pointer,用來指到下一個instruction的位置.  %rbp:Frame pointer,用來指到目前stack frame的開頭. %rsp:stack pointer,用來指到目前stack的top,也是尾巴。 sourece: Carnegie Mellon 1 Assembly and Bomb Lab 15-213: Introduction to Computer  x86的stack 是從高位往低位長的, 方向是rbp 往→ rsp ,caller呼叫函數時會把參數push(壓入)stack,接著呼叫函數,並把return的位址存在rbp+8的位置,接著把該含要用到的register值跟區域變數推入stack. 如下的程式Alpha呼叫Beta時,把引數23先推入stack,再呼叫Beta並先把返回位址推入stack. sourece: https://www.doc.ic.ac.uk/~herbert/teaching/CA05-Intel-5.pdf 題目一:函數返回時利用buffer overflow去呼叫另一個不帶參數函數 bomb程式有...

Raspberry Pi (ARMv6)上自幹一個微小作業系統

      大約半年前,我加入fb的F9 based JuluOS與黃敬群老師( Jserv) 成大嵌入式系統課程社團,我才發現原來台灣有那麼多人在研究作業系統開發,我也想試試開發一個小小的OS。      從0開始寫一個OS是相當有趣的過程,可以檢視自己對C、資料結構、作業系統、計算機組織的瞭解程度,誠實的面對自己,雖然自己在系統廠工作幾年了,還是很多基礎知識不足,也許這就是為什麼那麼多高手可以在ic design house,而我在系統廠吧,寫這個小OS,只是學習的開始,接下來我會多研究其它的OS,例如:xv6、F9 microkernel、freeRTOS...       我把開發流程一步一步記錄,從bare metal Helloworld,加入printk,配置MMU, IRQ中斷,記憶體管理(Buddy system),到最後加入system call、process fork與round robin scheduling,方便學習。        所有原始程式碼都放在github上:  https://github.com/tzuCarlos/RaspberryPi      我使用qmeu測試:      這邊有執行的結果: https://github.com/tzuCarlos/RaspberryPi/blob/master/mimiOS/RESULT      系統說明:         先拖稿一下,下班還要唸書,顧嬰兒很累的,改天有空補上一步步說明XD      未來工作:      1.把ARM的架構跟ARM組合語言弄熟。      2.系統memory map我還沒好好規畫,只是想到做什麼功能,就找一塊出來。      3. 沒有檔案系統,沒有shell、沒有驅動程式構架。       ...

vim + cscope + ctags + nerdtree + taglist + SrcExpl+trinity, c ya source Insight.

圖片
 Bought a MACbook air installed ubuntu+LXDE, time to say good bye to windows & source Insight. I tried eclipse to develop C about 1 month before, eclipse is nice tool to trace code, but somehow I still feel eclipse a bit laggy.        Finally, I use VIM, because both of MAC OS X and Linux have VIM.      website:  The NERD tree : A tree explorer plugin for navigating the filesystem download NERD_tree.zip unzip NERD_tree.zip  mkdir -p ~/.vim/plugin  mv plugin/NERD_tree.vim ~/.vim/plugin  vim ~/.vimrc add this line: nnoremap :NERDTree same producer to install taglist,  trinity,  and SrcExpl.  You may need a script to generate cscope and ctags index files. CSCOPE_FILE=cscope.out if [ -n "$1" ]; then  echo "Source code directory: " $1  echo "Create file map : " $CSCOPE_FILE  find $1 -name "*.c" -o -name "*.c" -o -name "*.h" -o -name "*.c" -o -name "*.S" > ...

自己動手做OS之Raspberry Pi interrupt example 筆記

圖片
Happy Chinese New Year!!  希望我年假,有更多時間好好學習作業系統...T_T 這是個學習筆記,還未整理好,看起來很亂,但是我會盡量把該注意的重點寫下。 Interrupt example Raspberry Pi source code: https://github.com/tzuCarlos/RaspberryPi/tree/master/labInterrupt 這範例中,我們使用timer 產生IRQ,執行時,可以看到,每隔一小段時間,就會印出IRQ_handler,在IRQ_handler()中,先關掉了IRQ再印出IRQ_handler,接著啟動IRQ,這是一個簡單的範例,但不是有效率的處理IRQ方式,以後我們來討論巢式中斷。 當IRQ發生時,硬體會自動跳到0x18的位址上去執行程式,但我們系統是掛在0x10000上,跳到0x18時並沒有東西,這時有幾個解決方式,1是利用mmu把0x18 mapping 至 0x10018上,或是設定CP15,跳轉到正確的中斷處理向量表上。 ARM的官方網站有很好說明,值得一看。 http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0203j/Cacbhjjj.html 以下是節錄  陳鐘誠老師的網站( http://sp1.wikidot.com/arm ) ------------------------------------------------------------------------------------------------------------------------- ARM 的可存取暫存器為 R0-R15,其中 R13為堆疊指標 SP (Stack Pointer),R14 為連結暫存器 LR (Link Register),R15 為程式計數器 PC (Program Counter)。 ARM的狀態暫存器有 CPSR (Current Processor Status Register) 與 SPSR (Saved Processor Status Register)。其中 SPSR 乃是在中斷時用來自動儲存CPS...

MAC OS X 10.10 minicom USB to serial 安裝

1. 下載 minicom 2.7 https://alioth.debian.org/projects/minicom/ 2.解開後 ./configure (我的安裝時說automake需要安裝Xcode,就安裝先囉) make sudo make install 3. 上usb-to-serial cable網站我的chip是PL2303 -> 系統偏好設定>安全性與隱私>允許安裝 查詢我的設備是tty.usbserial ls -1 /dev/tty .* /dev/tty.usbserial  4.執行minicom -s 設定> Serial port setup -> A - Serial Device: /dev/tty.usbserial -> F - Hardware Flow Control: NO 選: save setup as dfl  -> 發現錯誤 sudo mkdir /usr/local/etc -> sudo chmod 777 /usr/local/etc nailed it!!!