2008/07/08

[Wargame]ccu Middle ~ Mid04

Middle
Given:
  1. 一個看不到目錄內容的目錄
  2. Nothing ...
Thinking:
  1. 猜吧...
  2. shell的執行檔名稱 ...

Mid01
Given:
  1. 'less' with setuid
Thinking:
  1. how to execute a external program by that program
  2. man less!!

Mid02
太簡單


Mid03
Given:
  1. 一堆指令
  2. A program with setuid attribute is at ~mid04/bin/myshell
Thinking:
  1. Restricted-shell. How to escape?? vim??

Mid04
Given:
  1. A backdoor at??
  2. The password of backdoor
Thinking:
  1. 登入後門後,建一個可以讓mid04轉到mid05的setuid程式。

2008/07/07

[Wargame]ccu Basic 6~9

Basic 6
Given:
  1. A file but where?
  2. DES code
Thinking:
  1. scanning port by nmap
  2. get master.passwd
  3. crack the password by John the ripper

Basic 7
Given:
  1. The password is inside the binary program
Thinking:
  1. How to get the strings inside the program (strings)


Basic 8
Given:
  1. A program with setuid and the source code
Thinking:
  1. 可以在source code內找到它運用了getuid這個function,而此function是由某個library提供的。
  2. 是否可以用某些方式讓該程式不要去讀取原本的library,而去讀取我們自己的library
  3. LD_PRELOAD ??


Basic 9
Given:
  1. A program with buffer overflow vulnerability
Thinking:
  1. 有一變數在複製資料進去時,並沒有做bound checking,也因此我們可利用寫超過的資料去覆蓋程式中其他變數的值

2008/07/06

[Wargame]ccu Basic 0~5

台灣冒險傢俱樂部共有20關,分別從Basic 0~9,Mid00~Mid09

Basic 0
Given:
  1. A hostname
  2. Password hint
    • 第1至第4個及第7個字元在密碼表裡
    • 第5,6,8個字元為任意字元
Thinking:
  1. 使用nmap去掃主機上的有開那些port,再telnet看看吧
  2. 任意字元是什麼意思,可以由shell來思考。

Basic 1
Given:
  1. A program with setuid
  2. The source code of the setuid program
Thinking:
  1. 看到該程式source code呼叫了system並且其參數不是使用絕對路徑,是否能改變系統找程式的路徑?
  2. 試試shell變數 path
Basic 2
Given:
  1. nslookup with setuid
Thinking:
  1. nslookup是否可執行外部程式,或是否有執行外部程式?help??
  2. PAGER及PATH環境變數

Basic 3
Given:
  1. A program with setuid
Thinking:
  1. system函式的參數直接由外部存取,Command injection?


Basic 4
Given:
  1. r-family指令, such as rsh, rcp...
Thinking:
  1. 發現.rhost將權限給expose出來了

Basic 5
這關太智障,猜一下就出來了。



待續...

2008/07/05

Wargame

Wargame為專為有心成為駭客的玩家所設計的遊戲,當初我會接觸這類型的遊戲主要是因為學校的修課,那門課的期末project評分方式就是以你過了多少wargame,在那1~2個月裡,我過了一堆wargames並且將他們寫成了報告,從今天開始我會將這些報告整理出來,並且寫到這個部落格里讓大家參考解法,但為了保持wargame的挑戰性,答案我還是儘可能不會直接寫出來。

以下是wargame網站的列表(我只列出我有玩的, ps. 有些大陸的wargame十分智障,可以不去玩):
另外,有幾本書可以參考:

2008/06/19

投資書:一個投機者的告白

一個投機者的告白 by Andre Kostolany

這本書我當個閒書來看,閒書就是看了會開心,大便無聊的時候可以,對於內容也不用太認真的書。以下是本書的書目及批眉:

1. 金錢的魅力
錢很重要,但不僅要懂得賺錢,更要懂得花錢,花錢是促進市埸活絡的重要因素,奢華是種美德。資本主義是原罪,卻很貼近人類的本性。

2. 證券交易動物園
8種在證交所的動物。
成為一位投資者或投機者,投資者是證券市場的長跑者,投機者則介於證券玩家和投資者之間,投機家像新聞記者一樣,靠著自己追蹤收集來的新聞為生。新聞記者撰寫新聞,而投機家分析新聞,然後又必須像醫生一樣,作出診斷,投機者冒更大的風險獲取更大的暴利。
經紀人 --> 只管成交量 XDDDD

3. 憑什麼投資
債券、外匯、原料、有形資產、房地產及股票。

4. 奇幻的證券交易所
作者對證交所的想法。能在證交所裡看到世界歷史的影子,這是一面扭曲的鏡子,能讀懂鏡子裡的人,就享有特權。證交所是經濟的溫度計(書裡說不是,換句話說對於投機者不是,投資者是),雖然過程中會起起伏伏,但大方向仍與經濟發展相同。

5. 指數有什麼道理
指數就是會起起伏伏,這個起伏取決於供需原則。金錢的流動才會造成經濟成長。

6. 行情上漲的祕密(貨幣)
貨幣+心理=趨勢。此章一直在討論利率調整、貨幣供給(外匯+利率),與企業營運的關係。利率調整後,12個月之內會反應到股票指數,而此同時,債券會成為新寵。

7. 證券交易心理學(心理)
固執的投資者與猶豫的投資者,固執的投資者具備四種要素:金錢、想法、耐心和運氣。科斯托蘭尼雞蛋。

8. 暴漲和崩盤是分不開的搭檔
暴漲之後必拌隨著崩盤。這太多實例了,2000年的網路泡沫化、最近的滬股,都說明了這種情形。
在閱讀這章時,有個地方看不太懂:當發生通貨緊縮,政府該如何對應?書上是寫讓幣值貶值,使得大家都能安心領得到錢(?),但為何這會讓通貨緊縮的消失?(i.e.流通的現金增多)

9. 逆向是成功的要素
做多不做空。
如何判斷市場處於那個階段。(1)有利or不利消息與指數,(2)成交量與指數。
有利消息,指數沒反應,行情高點的徵兆。不利消息,指數沒下跌,行情低點的徵兆。
行情下跌,成交量大,股票轉移到固執的投資者手裡。成交量增加,行情下跌,接近下一次上漲的起點。成交量小,指數繼續下跌,市場前景堪慮。成交量愈來愈大,股票不斷看漲,市場前景堪慮。成交量小,指數看漲,情形有利。

10. 從預言家到顯示幕的訊息叢林
最沒有意思的,就是那些和指數發展趨勢有關的訊息,這些都是先有指數,才有訊息的。
既成事實的現象。既成事實-->股價下跌。
觀察新聞內的細節消息,並採取相對應的動作

11. 從證券交易所到交易股票
投資最看重的是普遍的趨勢,其次才是選股。
新興行業成「之」字型發展。(第一階段所有公司迅速發展,隨後淘汱不好的,剩下體質完整的公司)
圖表可能賺錢,但肯定賠錢。可作為分析的其中一項依據,如雙重頂(m)或雙重底(w)。

12. 用別人的錢交易的投機者
基金、投資顧問、財產管理人。(老戲重提)

13. 寫給敢做敢為的人
十律與十戒。(我不想成為打字工,請自行翻書)

投資書單

研究生生活準備要告一個段落了,未來生活的目的,將會有一極大部分將會是為了賺更多的錢,也因此最近開始萌生投資的想法。在此之前,我已經投資了基金有2年之久,在去年次貸風暴之前,不論是各式的基金,其績效都還不錯,在次貸之後,一直到現在,績效一直不見好轉,於是我開始思考基金該如何投資才能有好的績效?其他的投資商品又該如何選擇?目前我打算先行藉著這一個月內的閱讀及觀察股票市場來加強自行判斷的能力,在這閱讀期間,會再挑選幾家有潛力的公司來觀察。以下是我預期要閱讀的書單,會選這些書是參考ptt stock版的一些長輩的文章,再加上自己在書店稍微翻一下決定的。

第一批的投資書單:
可能的第二批書單:

2008/04/03

Make vim more powerful

在Linux下我最習慣使用的程式編輯環境是vim(我在windows很少寫程式),或許過去習慣使用visual studio,Eclipse,Netbean或是相關IDE的人,會覺得怎麼會有人還會使用這種古董級的編程環境,它既難用,又少了一堆功能。但事實上真正會使用vim的人,他們的vim是可以比source insight這類的源碼追蹤環境還強大的。這篇文章我主要是來介紹「如何打造vim成為一個強大的編程環境」。這篇文章適合稍微對vim有一點瞭解的人來閱讀。

在開始之前我先讓大家看一下我的vim視窗截圖
這張圖內有幾個重點要觀察:
  • 多檔編輯列表顯示在最上面的小視窗裡。
  • 源碼有folding的功能,左邊中間的視窗。
  • 字串搜尋的結果及編譯的訊息顯示在左下的視窗,這個視窗稱為quickfix window。
  • 源碼的函式列表顯示在右邊視窗。
另外還有些功能是上圖沒顯示的:
  • 源碼追蹤,這能讓你跳到你現在游標所在變數或函式的宣告或是定義的地方。
  • 方便的瀏覽硬碟內的檔案並開啟。
  • 源碼補齊,對於寫大專案很需要這種功能。
以下我將簡單介紹如何使用這些功能,詳細資訊請自己閱help document及http://www.vim.org 有些快速鍵是以我的vimrc(vim設定檔,位於~/.vimrc)為基礎,所以有需的人可以參考我的設定檔及plugin包

多檔編輯

這個功能是使用tabBar的vim plugin,將該plugin下載並放在~/.vimrc/plugin/後,在多檔編輯時該視窗會自動跑出來。切換視窗的方法大略為Ctrl+Tab Ctrl+Shift+Tab 及 Alt+[number]。

補充:在vim要開其他檔,可輸入:e 檔名來開啟其他檔。

Folding

Folding又可以叫程式碼摺疊,這個功能是預設就有的,詳細指令可參考gvim裡的工具列Tools->Folding,我平常不習慣使用這個功能,若要開啟我會設:set foldmethod=indent

字串搜尋及編譯訊息列表

這兩項功能的訊息列表是放在quickfix window,開啟方式為:copen關閉為:cclose。我的快速鍵為F4。另外要跳到下一個及前一個訊息的指令為:cnext :cprev。我的快速鍵為Ctrl+n及Ctrl+p。
字串搜尋的指令為:vimgrep [pattern] [file_list]。編譯的訊息,使用前提是你要有Makefile,編譯時只要打:make其訊息將自動放至quickfix裡。我的快速鍵為Ctrl+F3。

函式列表


這是使用taglist這個plugin。我的快速鍵為F5。

源碼追蹤

在vim裡必需有ctags檔案的技援,在使用前必需先安裝,在ubuntu內安裝很容易,在terminal輸入sudo apt-get install exuberant-ctags就安裝完了,產生該檔的指令有點複雜,在vim裡輸入":!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q ." 即可。我的快速鍵為Ctrl+F12。
有了該檔案,在vim只要游標移到你想要查詢的函式或變數輸入Ctrl+]或Ctrl+t即可跳過去再跳回來,若是有同時找到多個類似keyword,你可以輸入:ts選擇你要跳那一個,或是當你已經跳過去了,想直接跳到下一個keyword可以輸入:tnext。
另一種可能使用的情形是有些人想要直接開另一個window來看該keyword,這種情形可以使用srcexplore這個plugin。我的快速鍵為F6。


檔案列表

使用ls這個plugin,我的快速鍵為F2。

源碼補齊

使用omnicppcomplete這個plugin,我平常不習慣用它,請大家自己參考plugin的網頁:
http://www.vim.org/scripts/script.php?script_id=1520


結論

其實vim還有很多很強大的功能,只是跟其他IDE比起來沒有一開就預設裝好,但藉著一些plugin,可以讓它擁有各式各樣的能力,此外,你還可以自行的修改它,讓它符合平常使用的習慣。這篇文章,主要介紹了一些plugin,主要是讓已熟悉使用vim的讀者們能更瞭解到vim的強大,並且將它運用在工作中,希望這篇文章能讓讀者們能更快快樂樂的用vim。

參考資料

2008/03/17

316綠營大遊行

這不是政治文,這絕對不是政治文。

我的老闆是一位政治狂熱份子,每天的信箱總是會有固定幾封信是他寄來的,內容不外呼是馬19如何、國民黨又做什麼該死的事、要不然就是中國是如何的不好。不討論事實是如何,但這些行為多少都會有種催眠的效果。

前幾天他更進一步的展現他的熱情,他邀請我們參加316大遊行,而我再過幾個月就要碩士口試,他的邀請就如同拿著刀子抵著我的脖子笑笑問我「你要不要來參加遊行」,「ok」,我只能很無耐的回答。姑且不論我是否是綠營支持者,但我是個阿宅,阿宅是不會參加這種活動的。

當天早上,為了這個活動我從台北趕到新竹,回到新竹先吃個飯,吃完就睏了,睡了個小覺,睡到正爽,有個該死的電話吵醒了我,打開手機一看,心頭一涼「幹!!是老闆」,老闆很熱切的以為我到了找不到他們,還跟我說他們在那裡,我只能用很慌張的聲音說我還在路上>_<。掛上了電話,我只用了1分鐘的時間,整裝衝出了家門,一路狂飆到集合地,在路上己經有很多人集結了,在騎車的時候,阿妮一直跟別人比讚,大家都會回應我們,還滿好玩的。跟老師的集結地離學校有點遠,我騎了近20分鐘才到,到那還找了一下才找到他們。

找到他們後,他們已經開始在往下一站的地方走了,而且不斷地跟遇到的人擊掌,擊掌的時候,還會說「加油」或「當選」之類的,因為我們走了好長一段距離,擊掌擊到手好酸,除了手酸外,一直在看跟我擊掌的是不是正妹,這應該是唯一的樂趣。

整個活動大概就降,多多少少有一點感動到,但除了感動,究竟誰當選對我最好,不是台灣不是其他人,而是我。這是我投下這一票所思考的,在心中我已經有了答案。

2008/03/15

Gnucash: A personal finance tracking program

一個在Linux下的資金管理程式。

有興趣的人可以看以下介紹:
  • http://blog.xuite.net/michaelr/linux/16188248
  • http://blog.xuite.net/michaelr/linux/16196502
  • http://blog.xuite.net/michaelr/linux/16196596
  • http://blog.xuite.net/michaelr/linux/16196657

2008/03/12

Profiling tool: Valgrind with cachegrind

以下摘自官網:
Valgrind is an award-winning instrumentation framework for building dynamic analysis tools. There are Valgrind tools that can automatically detect many memory management and threading bugs, and profile your programs in detail. You can also use Valgrind to build new tools.
其中有個extension(skin)叫做cachegrind可用來做profile,而且還有qt-based的結果顯示介面,我做了個擷圖如下:

測試程式是apache。

在ubuntu上安裝這些軟體很方便,全部都apt-get就行。感謝製作軟體、維護套件庫的大家。

Ref.
Valgrind http://valgrind.org/

Profiling Apache 1.3.34 using GProf

因為某些原因必需profile apache 1.3.34,其中與一般使用gprof不同的是編譯時要加特別的參數,我將過程紀錄如下,其中有些是pseudo code。

$ tar xvf apache1_3_34.tbz
$ cd apache
$ ./configure --prefix=/home/fcwu/apache/working --enable-module=rewrite --enable-module=proxy
$ cat replace_cflags.sh
1 #!/bin/bash
2
3 TMP=`mktemp`
4 REPLACE="-pg -DGPROF -g -DNO_USE_SIGACTION -fno-stack-protector -fno-stack-protector-all"
5 #REPLACE="-pg -DGPROF -g -DNO_USE_SIGACTION -fno-stack-protector"
6 #REPLACE="-pg -DGPROF -g -DNO_USE_SIGACTION "
7
8 for file in `find src/ -name "Makefile"` ; do
9 echo "[Replace file=$file]"
10 grep -nH "^CFLAGS=" $file
11 sed "s/^CFLAGS=/& $REPLACE /" $file > $TMP
12 cp $TMP $file
13 grep -nH "^CFLAGS=" $file
14 done
15
16 rm -f $TMP
$ ./replace_cflags
$ make
$ cd src
$ gcc -static -pg -g -DLINUX=22 -DHAVE_SET_DUMPABLE -DNO_DBM_REWRITEMAP -DUSE_HSREGEX -g -pg `./apaci` -rdynamic -o httpd buildmark.o modules.o modules/standard/mod_env.o modules/standard/mod_log_config.o modules/standard/mod_mime.o modules/standard/mod_negotiation.o modules/standard/mod_status.o modules/standard/mod_include.o modules/standard/mod_autoindex.o modules/standard/mod_dir.o modules/standard/mod_cgi.o modules/standard/mod_asis.o modules/standard/mod_imap.o modules/standard/mod_actions.o modules/standard/mod_userdir.o modules/standard/mod_alias.o modules/standard/mod_access.o modules/standard/mod_auth.o modules/standard/mod_setenvif.o main/alloc.o main/buff.o main/http_config.o main/http_core.o main/http_log.o main/http_main.o main/http_protocol.o main/http_request.o main/http_vhost.o main/util.o main/util_date.o main/util_script.o main/util_uri.o main/util_md5.o main/rfc1413.o os/unix/os.o os/unix/os-inline.o ap/ap_cpystrn.o ap/ap_execve.o ap/ap_fnmatch.o ap/ap_getpass.o ap/ap_md5c.o ap/ap_signal.o ap/ap_slack.o ap/ap_snprintf.o ap/ap_sha1.o ap/ap_checkpass.o ap/ap_base64.o ap/ap_ebcdic.o ap/ap_strtol.o regex/regcomp.o regex/regexec.o regex/regerror.o regex/regfree.o \
modules/proxy/proxy_cache.o modules/proxy/proxy_connect.o modules/proxy/proxy_ftp.o modules/proxy/proxy_http.o modules/proxy/proxy_util.o modules/proxy/mod_proxy.o \
modules/standard/mod_rewrite.o \
-lm -lcrypt -lexpat -ldl -fno-stack-protector
$ make install
$ cd ~/apache/working/bin/
$ ./httpd -X -f /home/fcwu/apache/working/conf/httpd.conf
testing it
$ gprof ./httpd ../logs/gmon.out

其中有個重點是在編譯apache時,要用幾個特別的define值:"-DGPROF -DNO_USE_SIGACTION"。而為了讓gprof能work要加-pg的編譯參數,再為了讓時間的結果跑出來,必需用static的方式把所有的library以靜態的方式將所有想profile的部分編入(這就是我gcc很長長長的那一行)。

另外有些小技巧像是find的使用,我在測時intensively使用,像是:
find ~ -name "gmon.out" -exec ls -al {} \;
find ~ -name "gmon.out" -exec rm -i {} \;

2008/03/07

Busy and painful work

太久沒更新blog了,主要是因為忙著寫我的SocketTracker for thesis以及Chapter 1。

寫程式是件愉快的事,而且上個禮拜解決很多好玩的問題,像是記錄在system call被呼叫時,user program最後執行EIP位置,以及一些kernel hacking。

另一件事,寫Chapter 1就是件痛苦的事,真的很痛苦,一週我才有辦法寫個4面左右,問題不是出在英文,而是我這個人天生話少,一打開word又是坐在電腦前,什麼都不想做。
( 我不是想用word寫論文,而是範本就是給我word,如果要換成openoffice會很麻煩,而且老師也不好review)

接下來還要繼續痛苦下去。

除此之外,最近打算參加2個talk。一個是jserv給的快快樂樂學GDB,另一個是OSDC的conference。

2008/02/12

Simple UDP server in kernel space with kernel thread

在Fred's blog看到的

Simple UDP Server in Kernel-space

Web Server in kernel-space

在這兩個例子可以看到如何在kernel裡撰寫網路程式以及如何使用kernel thread

2008/02/09

Delete duplicate row without disarranging original order

這是在ptt的linux版看到的討論串,還蠻有趣的,有許多不同的語言作法。

問題
$ cat file.txt
00120
00345
00345
00567
00789
00789

請問如何將重複的列刪除,變成下面這樣:
00120
00345
00567
00789


Linux command (by kenduest)
cat -n test.txt | sort -k 2 -n -u | sort -k 1 -n | cut -f 2
Bash (by FourDollars)
#!/usr/bin/env bash

declare -a db
declare -i index=0

cat file.txt | while read line; do
if ! echo ${db[*]} | grep $line > /dev/null; then
db[$((index++))]="$line"
echo "$line"
fi
done
Perl (by OuTian)
cat test.txt | perl -ne 'print unless($s{$_}++)'
C (by HZYSoft)
/* File: remove_dup.c: Remove duplicated string in a file.
Author: PCMan (C) 2008.02.08
License: GNU GPL V2 */

#include <stdio.h
>
#include <stdlib.h>
#include <string.h>
int main( int argc, char** argv ) {
int i, j, n, buf_size = 1024;
char **strv, line[1024];
FILE *f;
if( ! (f = fopen( argv[1], "r" )) ) return 1;
strv = (char**)malloc(buf_size * sizeof(char*) );
for( n = 0; fgets( line, sizeof(line), f ); ++n ) {
if( n >= buf_size ) {
buf_size += 1024;
strv = (char**)realloc( strv, buf_size );
}
strv[n] = strdup( line );
}
fclose(f);
for( i = 0; i < n; ++i ) {
for( j = i + 1; j < n; ) {
if( 0 == strcmp( strv[i], strv[j] ) ) {
free( strv[j] );
#ifdef KEEP_ORDER /* 如果保持原有順序 */
memcpy( &strv[j], &strv[j+1], sizeof(char*) * (n-j-1) );
#else /* 如果不管順序,這樣速度會快很多 */
strv[j] = strv[n - 1];
#endif
--n;
}
else {
++j;
}
}
}
if( ! (f = fopen( argv[1], "w" )) ) return 1;
for( i = 0; i < n; ++i ) {
fputs( strv[i], f );
free( strv[i] );
}
fclose( f );
return 0;
}

2008/02/07

Difference between __cdecl and __stdcall

在呼叫函式的前,程式必需先將參數放到stack裡,隨後在函式執行完後,這些參數若是由caller負責清除則稱為__cdecl,反之若是callee負責則為__stdcall。

他們有以下的不同點及討論:
  1. __stdcall的呼叫,程式大小會比較小一點。
  2. printf這類不定量的參數的函式,只能使用__cdecl的呼叫

Reference.
  1. __cdecl and __stdcall
  2. Intel x86 Function-call Conventions - Assembly View
  3. Using Win32 calling conventions

Happy lunar new year!?

今年的農曆年過得比以往較不同,一來是放假的時間沒有像快樂的大學生,以及無憂無慮的研一來的長,二來是在過外的老師沒有過中國年,想當然,我們這些研究生也別想過年。過年期間要煩惱的事有一堆,隨便舉就有論文數據有問題、SocketTracker的實驗要做、論文outline、老師叫我寫的paper要改,隨便舉舉就一堆,根本就快樂不起來。

雖然很多事情要煩,但是該訂的電動還是一個也不能少,這次年假的主力放在2個遊戲,一個是Biohazared Umbrella,另一個是瑪力歐的北京奧運的遊戲。Bio那款打到後來很想要有個什麼密技之類的,最後看到有人說只要所有scenario的chapter Hard等級打到Rank S就可以有無限彈,在我的不眠不休的實驗,結論"不可能",在無技可施之下我只好去找別人已經都打到S的存檔,再複製到我的Wii裡,有了無限彈,打起來真的很爽,但是卻好像少了點樂趣。另一款北京奧運的遊戲我也很推薦,家裡有Wii的人可以買來玩。

今年過年大概就在打電動吃東西中渡過。當然,為了初六要跟老師meeting,現在要開始改paper了。好痛苦喔。

(好混的日記)

2007 Turing Award

I think Turing Award is an important award for whom had great contribution towards computer science. However, it seem less people discussed it in Taiwan.

Edmund M. Clarke, E. Allen Emerson, and Joseph Sifakis are the recipients of the 2007 A.M. Turing Award for their work on an automated method for finding design errors in computer hardware and software.

The method, called Model Checking, is the most widely used technique for detecting and diagnosing errors in complex hardware and software design. It has helped to improve the reliability of complex computer chips, systems and networks.


Original article Dr.Dobb 2007 Turing Award Winners Announced

2008/01/30

Japan drama in winter '07. Vol 2.

到今天為止冬季日劇都已經演個2~3集了,推薦度也有所變更,之前我一直以為我是個劇情取向的人,不是個卡司取向或是xx取向,但是看到現在,結論是.....我是正妹取向 科科

以下是由推薦到不推薦的排序:
  • SP (11集完)
  • 沒有玫瑰的花店 (竹內結子跟釋由美子超正)
  • 談判專家 (米倉涼子身材超好)
  • 明天的喜多善男 (小忍魂)
  • 蜂蜜與四葉草 (內有正妹,請進)
  • 愛迪生之母 (這部在看劇情)
  • 齊藤太太 (觀月亞理莎太老了,不合我胃口)
以下提不起勁來看:
  • 一磅的福音
  • 未來老師(雖然深田恭子很可愛,但劇情太爛)

2008/01/29

Porting linphone to PXA270

前言
最近在幫別人做embeded system design的期末作業,這作業主要是要讓板子pxa270能有網路電話的功能voip。

我嘗試了兩套softphone,分別為pjsip及linphone,就這兩套來講那一套比較適合拿來開發我會推薦使用pjsip,主要是因它是提供了一套library來讓開發者使用,所以對於往後的ui開發,需要增加自己的額外功能時,pjsip一定是首選。

然而,我們這次作業並沒有使用pjsip,是因pjsip我們cross-compiler完後,使用它的voip功能,電話播通後卻無法成功將聲音播出或送出去,但直接使用其library放音卻可以。

最後我們放棄使用pjsip,改換成linphone來porting,linphone有為需要cross-compile的人寫了一份參考文件,但該文件略嫌簡略,又有些地方有誤,故我將compile經過重新記錄一次,以供大家參考。

Porting過程
在porting前必需先將需要幾個dependency package抓好(依編譯順序排列):
  • readline-5.2
  • ncurses-5.6
  • libosip2-3.0.3
  • libeXosip2-3.0.3
  • libogg-1.1.3
  • speex-1.2beta3
  • linphone-2.0.1
首先,先設定一些環境變數
export ARM_INSTALL_TREE=/home/timy/armbuild
export PATH=$PATH:/opt/microtime/pro/devkit/arm/pxa270/gcc-4.0.2-glibc-2.3.3/arm-unknown-linux-gnu/bin
開始編譯:
Cross compiling ncurses for ARM:
********************************
./configure --prefix=/usr --host=arm-linux --with-gnu-ld --with-shared
make
make install DESTDIR=$ARM_INSTALL_TREE
make install DESTDIR=`pwd`/armbuild
Cross compiling readline for ARM:
*********************************
./configure --prefix=/usr --host=arm-unknown-linux-gnu --with-gnu-ld --disable-static
make
make install DESTDIR=$ARM_INSTALL_TREE
make install DESTDIR=`pwd`/armbuild
Cross compiling libosip for ARM:
********************************
./configure --prefix=/usr --host=arm-unknown-linux-gnu --with-gnu-ld --disable-static
make
make install DESTDIR=$ARM_INSTALL_TREE
make install DESTDIR=`pwd`/armbuild
Cross compiling libeOsip for ARM:
********************************
./configure --prefix=/usr --host=arm-unknown-linux-gnu --with-gnu-ld --disable-static CFLAGS=-I$ARM_INSTALL_TREE/usr/include LDFLAGS=-L$ARM_INSTALL_TREE/usr/lib
make
make install DESTDIR=$ARM_INSTALL_TREE
make install DESTDIR=`pwd`/armbuild
Cross compiling libogg for ARM:
********************************
./configure --prefix=/usr --host=arm-unknown-linux-gnu --with-gnu-ld --disable-static
make
make install DESTDIR=$ARM_INSTALL_TREE
make install DESTDIR=`pwd`/armbuild

Cross compiling speex for ARM:
********************************
First you need to remove ogg headers from your build system to avoid a dirty conflict between your build machine binaries and the arm binaries. They are usually in a libogg-dev package (rpm or deb).
Then:
./configure --prefix=/usr --host=arm-unknown-linux-gnu --with-gnu-ld --disable-static --enable-arm-asm CFLAGS=-I$ARM_INSTALL_TREE/usr/include LDFLAGS=-L$ARM_INSTALL_TREE/usr/lib
make
make install DESTDIR=$ARM_INSTALL_TREE
make install DESTDIR=`pwd`/armbuild
Cross compiling linphone for ARM
********************************
First you need to remove all .la files from the ARM_INSTALL_TREE because it confuses libtool and makes
the linker use your build machine binaries instead of the arm-crosscompiled ones.
rm -f $ARM_INSTALL_TREE/usr/lib/*.la
#for some reason pkg-config doesn't like cross-compiling...
export PKG_CONFIG=/usr/bin/pkg-config./configure --prefix=/usr \
--host=arm-unknown-linux-gnu \
--with-osip=$ARM_INSTALL_TREE/usr \
--with-readline=$ARM_INSTALL_TREE/usr \
--includedir=$ARM_INSTALL_TREE/usr/include \
--enable-gtk_ui=no \
--enable-console_ui=yes \
--includedir=$ARM_INSTALL_TREE/usr/include \
--disable-video \
SPEEX_CFLAGS="-I$ARM_INSTALL_TREE/usr/include" \
SPEEX_LIBS="-L$ARM_INSTALL_TREE/usr/lib -lspeex -lspeexdsp" \
LDFLAGS="-L$ARM_INSTALL_TREE/usr/lib" \
LIBS="-leXosip2 -losip2 -losipparser2" \
CFLAGS="-I$ARM_INSTALL_TREE/usr/include"
make
make install DESTDIR='pwd'/armbuild


問題與討論
configure或compile時出現錯誤 T_T
遇到錯誤時,我的處理方法大都是:
  1. 判斷錯誤發生原因,藉由:
    • 螢幕上的輸出
    • log檔(for example, config.log)
  2. 重製錯誤(configure錯誤可以跳過此步)
    • 稍後會有詳細解說
  3. 解決問題
    • 大部分的問題皆是修改CFLAGS, LIBS, LDFALGS這幾個參數,至於這幾個參數的用處,請自己google一下gcc的compile教學,或是問人會比較快。
底下我將舉一個make時發生的錯誤,這是在編linphone時發生的錯誤:
gcc -shared .libs/linphonecore.o .libs/exevents.o .libs/misc.o .libs/enum.o .libs/sdphandler.o .libs/presence.o .libs/proxy.o .libs/friend.o .libs/authentication.o .libs/lpconfig.o .libs/chat.o .libs/general_state.o -Wl,--rpath -Wl,/home/fcwu/arm/src/linphone-2.0.1/mediastreamer2/src/.libs -Wl,--rpath -Wl,/home/fcwu/arm/usr/lib -leXosip2 -losipparser2 -losip2 ../mediastreamer2/src/.libs/libmediastreamer.so -Wl,-soname -Wl,liblinphone.so.2 -o .libs/liblinphone.so.2.0.1
/usr/bin/ld: cannot find -leXosip2
collect2: ld returned 1 exit status
make[2]: *** [liblinphone.la] Error 1
make[2]: Leaving directory `/home/fcwu/arm/src/linphone-2.0.1/coreapi'
從倒數第4行可以看到ld(linker)找不到libeXosip2.so,我第一個假設會是"尋找library的路徑"設定有錯,換句話說就是LDFLAGS有問題,為了證實確實是發生這問題,我們可以到/home/fcwu/arm/src/linphone-2.0.1/coreapi目錄下輸入arm-linux那行(第一行)看看會不會產生這個錯誤,若確實產生這個錯誤再append "-L/home/fcwu/arm/usr/lib",看看問題是否解決。等確定無誤後,重新./configure一次,並加入LDFALGS="-L/home/fcwu/arm/usr/lib"即可。

../coreapi/.libs/liblinphone.so: undefined reference to `ms_alsa_card_new_custom'
參考這個討論串裡的diff檔,修改即可。

出現asm...的錯誤
這是由於arm-linux-gcc不支援inline assembly的某些寫法(?)造成了。解法我是移植Linux kernel source code裡的include/asm-arm/裡的__FD_ZERO等4個micro到compiling的機器上的/usr/include/sys/select.h(應該是這個位置)。
這個問題應該有更好的解法,但是我很懶。

參考資料
  • Linphone的porting,可以參考以下幾個文件:
  • 在linphone資料匣內的README.arm(最重要)
  • 在linphone資料匣內的README.arm
  • 在linphone資料匣內的INSTALL
  • ./configure --help

2008/01/26

Lunch today: steamed bread

steamed bread是刈包,如下圖:




加1塊入口即化的豆腐(魯過的)、一塊素肉、一些花生粉、一些起士口味的素肉鬆、一些酸菜及香菜。我只能說:太好吃了....

Timy time: Hula hoop of WiiFit

Cute Timy came my home to play hula loop of WiiFit.

Timy was playing...
video

Rickey was play...

video

2008/01/24

BackTrack: hacking tool

BackTrack: the highly popular and regarded Linux Security Distro for ethical hackers

Get the demo video http://www.ethicalhacker.net/content/view/167/2/
I was so shocked by how easy to steal wlan password, hack gmail account, and invade someone computer.

Official site: Remote-Exploit

Seam Carving

剛才看到的一篇很好玩的影像處理技術。這種技術可以找到圖片裡不重要的橫軸或縱軸加以刪除,讓圖片能夠只縮長度或寬度並且看起來像是等比例的縮(不會失真)。這種方法又可以叫Retarget。

Image resizing by seam carsing (YouTube)

原文,是從Tsung's Blog出來的。

2008/01/22

paper, vulnerability sensor

Vulnerability sensor,這是最近在趕的paper,老師叫我負責寫的部分有introduction,related works及最後的reference,其他部分是由william,工程師來寫,而老師是做最後的修訂。

就我寫的部分,related works是比較不好寫的部分,在這裡我大概引用了20篇文章。在寫之前,首先我對他們做了分類,接下來再將這20篇的文章以優缺點的方法加以貫通。有時為了將一篇文章用簡單的1至2句話來說明,光是1句話就必需想很久,因為寫之前一定要對該文有基本的了解。

趕這篇文章大概花了5個工作天,這幾天幾乎都沒什麼睡,醒著的時候都在寫,實在是很痛苦。如今,寫完了,真是一整個痛快。

接下來還有很多事要做:
  • 1/25 論文計畫書
  • 1/31 論文outline
  • 1/31 實驗數據 (will miss deadline certainly)
  • 2/?? 書的初稿
實驗數據我一定會miss first deadline,追根就底,會miss絕大是因為老師叫我幫他寫paper。當然,如果miss deadline,不會怎樣就算了,但是老師前幾天還寄信來說:你們這些碩二的如果有誰miss deadline,第一次,你們會受到10-10的處罰(早上10前到實驗室,晚上10點後才能離開),第二次,扣你們的薪水。收到那封信時,當埸想回信罵他。

2008/01/17

Japan drama in winter '07. Vol 1.

目前正在追的2007冬季日劇(以我進薦程式來排序,推->不推):
  • SP
    要人警護官,由岡田准一主演,此部劇情很緊湊,且拍片手法也獨樹一格,也又有不錯的武打動作
  • 愛迪生之母
    由伊東美咲主演,劇情相當不錯,主要是描述一位天才兒童在學校學習碰到的問題,舉凡老師、家長等,其中在有些小孩提出的問題,都可讓"大人"們好好思考。舉例來說1+1為什麼會等於2(或許有些人會想到這是數論的問題),都十分的有趣。
  • 明天的喜多善男
    比起前幾部,這部陰沉了許多,此片主角(小日向文世)主演,在劇中飾演一位決定在11天之後要自殺的人,為什麼他可以那麼平淡決定自己在11天後要自殺?而在這11天當中,他又有什麼事是想要完成的。小日向的演技十分優秀,在第一集中,他與自己的對話讓我雞皮疙瘩掉滿地。
  • 沒有玫瑰的花店
    竹內結子主演,純脆是因為喜歡她,所以才在追這部片。
  • 談判專家
    米倉涼子主演,這部算是不錯的警察片,但是沒法讓我產生什麼共鳴,所以相對起來我沒有很推薦。
  • 齊藤太太
    日本的「親戚不計較」。觀月亞理莎主演。
  • 蜂蜜與四葉草
    年輕人的愛情劇,內有正妹。
  • 一磅的福音
    愛情拳擊片,愛情佔了較多的部分。
  • 未來老師
    爛片,一點都不好笑,深田恭子主演,本來很期待這部,可是劇情太爛。
其中,明天的喜多善男是分隔線,以它之上(包含它),是我認為比較好看的,下面的則是要不要繼續看都無所謂。

每部片的詳細介紹自行參閱豬豬字幕組的網頁

To be a Ph.D?

前陣子老師認為我目前的論文方向很有趣,問我要不要繼續唸博班,當時給他的回答是「不要」。

那時,主要不想繼續唸的原因大概有幾點:
  1. 博班唸出來,除了學歷上是博士,對於工作上,並不會有太多的幫助。
  2. 我討厭寫paper。對於寫paper而言,動手實做更能得到更多樂趣。
  3. 讀博士會變窮人。若是我博班讀4年,這4年可能的月收入大約3萬。
讀博班的好處呢?
  1. 英文會變好。
  2. 思考更有邏輯,文章會愈寫愈好。
  3. 更會present
從優點與缺點看來,似乎我最不能忍受的是「收入3萬」這點。其次再來是讀博班會要很痛苦的寫paper。

今天老師寫了一封信出來說:他現在有4個科技替代役名額,問如果有人想唸博班可以同時服替代役並且同時讀博班。當下,這讓我有點心動是否要讀博班。

但是,心動不到一分鐘,我又繼續開始寫我的paper後,我就完全不思考這件事了......寫paper實在是很痛苦