PIXNET Logo登入

sakbk

跳到主文

I would ... if I could ...

部落格全站分類:數位生活

  • 相簿
  • 部落格
  • 留言
  • 名片
  • 9月 07 週一 200913:54
  • Dual OS in EeePC (續)

snapshot-screen.jpg
 
前一篇的 Dual OS, 是利用  ntldr 去 load grldr
      C:\grldr="The Name You Want To See"
所以會造成我們只有醜醜的畫面(黑白). 因此就做了一個實驗 想不到竟然成功了...
(繼續閱讀...)
文章標籤

sakbk 發表在 痞客邦 留言(1) 人氣(176)

  • 個人分類:misc
▲top
  • 8月 02 週日 200908:43
  • Dynamic Library implement

 
在 Linux 有 dynamic library 這個東西,這個東西的好處就是可以把常用的功能獨立出來,可以減少 code size,那它究竟是怎麼做的呢?研究了一下 所以寫了一段 sample.
下面這一個是一個簡單的BMI (Body Mass index), 公式是體重除以身高(公尺)的平方.
// func.h
(繼續閱讀...)
文章標籤

sakbk 發表在 痞客邦 留言(1) 人氣(524)

  • 個人分類:misc
▲top
  • 7月 29 週三 200916:14
  • ELF File Format

 
什麼是 ELF ( Executable and Linking ) Format 呢?jollen寫的相當清楚只是在看時發現他原本的 sample code 好像已經抓不下來了, 一方面也是自己很久沒有寫 code了, 所以照他的範例自己實作了一些東西,不過大體上是相同的.
/*
 * Copyright (C) 2009 http://sakbk.pixnet.net/blog
 *
 * ELF Sample code.
 *
 */
#include <stdio.h>
#include <unistd.h>
#include <elf.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <malloc.h>
void READ_SECTION(Elf32_Ehdr *pEhdr, int fd) {
    Elf32_Shdr header[pEhdr->e_shnum];
    unsigned char *p_Shdr;
    int i, stroff, idx;
    printf("<Section Header>\n");
    //move to section header entry point offset
    lseek(fd, pEhdr->e_shoff, SEEK_SET);
    for (i = 0; i < pEhdr->e_shnum; i++) {
         read(fd, &header[i], sizeof(Elf32_Shdr));
         if (i == pEhdr->e_shstrndx ) {
             stroff = header[i].sh_offset;
             idx = i;
         }
    } 
   
    lseek(fd, stroff, SEEK_SET);
    p_Shdr=(unsigned char *)malloc(header[idx].sh_size);
    read(fd, p_Shdr, header[idx].sh_size);
    for (i = 1; i < pEhdr->e_shnum; i++)
         printf("\t[%.2d] - %-15.30s \t%.8x\n", i, &p_Shdr[header[i].sh_name], header[i].sh_offset);
}
void ELF_ARCH(Elf64_Half machine) {
  switch (machine) {
     case EM_M32:
          printf("\tARCH:\tAT&T WE 32100\n");
          break;
     case EM_SPARC:
          printf("\tARCH:\tSUN SPARCn");
          break;
     case EM_386:
          printf("\tARCH:\tIntel 80386\n");
          break;
     case EM_68K:
          printf("\tARCH:\tMotorola m68k family\n");
          break;
     case EM_88K:
          printf("\tARCH:\tMotorola m88k family\n");
          break;
     case EM_860:
          printf("\tARCH:\tIntel 80860 \n");
          break;
     default:
          printf("\tARCH:\tUnkown\n");
  } 
}
void ELF_TYPE(Elf32_Half type) {
  switch (type) {
     case ET_NONE:
          printf("\tTYPE:\tET_NONE\n");
          break;
     case ET_REL:
          printf("\tTYPE:\tET_REL\n");
          break;
     case ET_EXEC:
          printf("\tTYPE:\tET_EXEC\n");
          break;
     case ET_DYN:
          printf("\tTYPE:\tET_DYN\n");
          break;
  }
}
int ELF_CLASS(unsigned char *idx) {
   switch ( *( idx + EI_CLASS ) ) {
      case ELFCLASSNONE:
           printf("\tCLASS:\tNONE\n");
           break;
      case ELFCLASS32:
           printf("\tCLASS:\tELF32\n");
           break;
      case ELFCLASS64:
           printf("\tCLASS:\tELF64\n");
           break;
   } 
}
int IS_ELF(unsigned char *idx) {
   if( *( idx + EI_MAG0 ) !=  ELFMAG0 || \
       *( idx + EI_MAG1 ) !=  ELFMAG1 || \
       *( idx + EI_MAG2 ) !=  ELFMAG2 || \
       *( idx + EI_MAG3 ) !=  ELFMAG3
     ) {
        return 0;
   }
        return 1;
}
int usage(char *argv) {
   printf("Usage: %s filename\n", argv);
}
int main(int argc, char *argv[]) {
   int fd;
   Elf32_Ehdr e_hdr;
   if(argc < 2) {
      usage(*argv);
      return -1;
   }
   fd = open(argv[1], S_IRUSR);
   if(fd < 0) {
      printf("file open error\n");
      return -1;
   }
   read(fd, &e_hdr, sizeof(Elf32_Ehdr));
 
   if(IS_ELF(e_hdr.e_ident)) {
     printf("<ELF headers>\n");
     ELF_CLASS(e_hdr.e_ident);
     ELF_TYPE(e_hdr.e_type);
     ELF_ARCH(e_hdr.e_machine);
     READ_SECTION(&e_hdr, fd);
   }
   else {
     printf("Invalid ELF file\n");
   }
}
(繼續閱讀...)
文章標籤

sakbk 發表在 痞客邦 留言(0) 人氣(1,137)

  • 個人分類:misc
▲top
  • 7月 24 週五 200910:18
  • Dual OS in EeePC

sl400_mbr.png
 
小沈說希望可以在易PC上做Dual Boot, 於是就來研究一下如何將現有EeePC windows XP 的 build 先裝起來看一下是長什麼樣子.
在 XP 的 partition 當中有四個主分割區分別為 C:/ D:/ 一個PE:/, 和一個 ELF(Hidden partiton),且四個均為 Primary Partition. 所以基本上在這樣的條件下是跟本沒辦法裝現有 Xandros OS. 分割區已經被用完了.
(繼續閱讀...)
文章標籤

sakbk 發表在 痞客邦 留言(1) 人氣(289)

  • 個人分類:misc
▲top
1

最新文章

  • 一個多月..
  • New Life
  • ending
  • 胡言亂語
  • 學習
  • 心情
  • 上班趣事
  • 洗腦
  • 喜歡
  • leader?

最新留言

  • [13/12/16] Armadillo0304 於文章「initrd and initramfs...」發表了一則私密留言
  • [13/12/16] Armadillo0304 於文章「initrd and initramfs...」發表了一則私密留言
  • [13/12/16] Armadillo0304 於文章「initrd and initramfs...」發表了一則私密留言
  • [11/03/10] pi 於文章「ending...」留言:
    緣滅而後緣起~ 新的人生迎接著~ ...
  • [10/08/23] sakbk 於文章「一個多月.....」留言:
    你的眼睛有問題喔...
  • [10/08/20] kezeodsnx 於文章「一個多月.....」留言:
    你的照片好帥...
  • [10/08/12] sakbk 於文章「一個多月.....」留言:
    綱哥說的很有道理...
  • [10/08/11] kezeodsnx 於文章「一個多月.....」留言:
    這次工作的轉換,對我們都有一定程度的衝擊。換個角度想,我們都...
  • [10/08/02] sakbk 於文章「New Life...」留言:
    哈哈 謝謝馬尼拉 太久沒上來更新了 整個網站廢掉了 哈 ...
  • [10/08/01] 馬尼拉 於文章「New Life...」留言:
    不要忘了, 你也是很優秀的!! 不用擔心, 你一定可以勝任的...

文章精選

文章搜尋

誰來我家

參觀人氣

  • 本日人氣:
  • 累積人氣:

熱門文章

  • (1,201)busybox初探

文章分類

toggle 心情 (2)
  • 心情快寫 (9)
  • 上班趣事 (1)
toggle linux 分享 (5)
  • bootloader (1)
  • misc (4)
  • kernel (3)
  • shell (1)
  • system (3)
  • 未分類文章 (1)