ubuntu 在 R40e 上 還有 Debian 在 Sempron 2600 上

2008年6月12日 星期四

Root HD Image : fake sh - hello

繼續上一篇..準備 "sh" 就準備一個 名叫"sh" 的執行檔讓kernel load 就可以了.. 標準的 hello.c:
#include 
#include 
#include 

void main(int argc,char* argv[])
{
setsid();
(void) open("/dev/tty0",O_RDWR,0);
(void) dup(0);
(void) dup(0);

write(1,"Hello!\n",strlen("Hello!\n"));

_exit(2);
}
因為 Linux 0.01 提供的 function 不多,所以要這樣寫 (這是參考 linux 0.01 gcc4.0 port的作者網站資料)。 另外 該作者也已經修改 kernel,從a.out格式改為 elf格式。所以直接用 gcc 4.0 build就可以囉!
gcc -o hello hello.c -nostdlib -nostdinc -e main
-Ttext=100 -static -fno-builtin
../linux-0.01-rm-3.5/lib/lib.a
-I../linux-0.01-rm-3.5/include
上面是build的command。 就是要指定不使用stdlib,stdinc。 改指定 linux0.01中的lib.a和 include。 build完後,再把剛剛的 root hd image mount 回來,create bin directory,再把hello copy到 bin中,rename成 sh就可以了。 這樣開機message在 Ok. 後,就會出現 Hello! 代表剛剛寫的 hello.c 真的被kernel load進去執行囉!

沒有留言:

標籤

網誌存檔