在 register_globals = On 時, 
自動載入 $_GET 變數
例如 :
url : 127.0.0.1/index.php?menu=harry

linch0520 發表在 痞客邦 留言(0) 人氣()

        (
        echo "ehlo momo"
        sleep 1
        echo "AUTH LOGIN"
        sleep 1
        echo "username" //base64
        sleep 1
        echo "passwork" // base64
        sleep 1
        echo "mail from:xxx@mail.com"
        sleep 1
        echo "rcpt to:xxx@gmail.com"
        sleep 1
        echo "data"
        sleep 1
        echo "from:<xxx@mail.com>"
        sleep 1
        echo "to:<xxx@gmail.com>"
        sleep 1
        echo "subject:from linux script"
        echo "Mime-Version: 1.0 "
        echo "Content-Type: multipart/mixed; boundary="a""
        echo "--a"
        echo "This is the preamble.  It is to be ignored, though it is a handy place for composition agents to include an explanatory note to non-MIME conformant readers."
        echo "--a"
        echo "Content-Type: application/octet-stream;name="reed.txt""
        echo "Content-Transfer-Encoding: base64 "
        echo "SGkgeW91IGdldCBpdA=="
        sleep 3
        echo "--a--"
        echo "."
        sleep 1
        echo "QUIT"

linch0520 發表在 痞客邦 留言(0) 人氣()

在 Real-mode,interrupt vector table的起始位址是從
記憶體零的位址開始算起。然而,在protected-mode,interrupt vector
table是儲存於CPU的暫存器 (IDTR,Interrupt Descriptor Table Register),
因此轉換至protected-mode之前,必須先設定idt。

linch0520 發表在 痞客邦 留言(0) 人氣()

smm1
Location of the SMRAM
•    Specified in the SMBASE register of the CPU. This register cannot be

linch0520 發表在 痞客邦 留言(0) 人氣()

  • Mar 30 Sat 2013 23:35
  • 中斷

中斷向量表
 
在存儲器地址空間中,規定最低的1K空間,即00000H到003FFH為中斷向量表。全表共含256個中斷向量,每個向量的長度為4位元組,包含
中斷處理程序的起始地址。共有從0到255共256個中斷類型碼,每個中斷類型碼對應的中斷向量所在地址為該類型碼乘以4。舉例而言,如果中斷類型碼為
1,則對應中斷向量所在地址為00004H;如果中斷類型碼為33,則對應中斷向量所在地址為00084H。這樣,如果已知一個中斷類型碼,則需要通過兩
次地址轉換(中斷類型碼到中斷向量表地址;中斷向量表地址到中斷處理程序地址)才能到達中斷處理程序。另外應注意每一個中斷向量所包含的地址是以低二位元
組存儲偏移量,高二位元組存儲段地址的形式存儲目標地址值的。

linch0520 發表在 痞客邦 留言(0) 人氣()

圖片1
Setup Configuration Utility (SCU)
 
IFR 指的是由撰寫VFR code ,然後經由Compile 之後得到的File ,
有點像是List 的東西

linch0520 發表在 痞客邦 留言(0) 人氣()

1. 在 Training 的這包 Code , 如果要加自己的library 要加在 C:\EFI\FW\Platform\Common.dsc 裡
 

linch0520 發表在 痞客邦 留言(0) 人氣()

實作一個Pei Phase 的 Ppi (Protocol)
提供兩個service
1. PeiGetVariable
    讀取特定Variable (指定Name, Guid )

linch0520 發表在 痞客邦 留言(0) 人氣()

執行 fs0:\> load drivermd.efi -nc  後
會跳進 DriverBinding Protocol 執行 Supported Function 一次  > 不曉得為甚麼
在輸入 fs0:\> connect "DriverBinding Handle #"    

linch0520 發表在 痞客邦 留言(0) 人氣()

_CR tracing
#define _CR(Record, TYPE, Field) 
            ((TYPE *) ( (CHAR8 *)(Record) - (CHAR8 *) &(((TYPE *) 0)->Field)))

linch0520 發表在 痞客邦 留言(0) 人氣()

變數
何謂變數? 在談論與變數相關的問題時, 請記得所有程式語言到最後都要編譯或解譯成電腦看得懂的機器語言。 機器語言的層次, 沒有變數的概念, 只有 「記憶第幾個 byte 起, 到第幾個 byte 為止」 的概念。 也許 把每一個簡單變數想成是一個盒子, 下面的觀念就會比較具體了。
r-value 與 l-value

linch0520 發表在 痞客邦 留言(0) 人氣()

1. 區塊 (block)

例如: { .... }

區塊就是任何以大括號包起來的區域, 如函式區塊, if區塊, for區塊

嚴格說起來, 在任何 statement 出現之前, 一定要把 block 內使用到的變數定義好

在 block 外定義的變數就是 global variable

在 block 內定義的變數就是 local variable

在 block 內想要使用不在 scope 裡的 global variable, 就要用 extern 宣告此變數

在 block 外想要使用 local variable, 很可惜, C語言沒有支援這種功能

在 block 內定義的變數, 會遮蔽 block 外定義的變數

2. 宣告 (declaration)

例如: (auto) int a; // in block, 定義 + 宣告
int a; // out block, 定義 + 宣告
extern int a; // out block, 宣告

宣告主要是告訴 compiler 說 "這個變數之前有定義過了, 我現在要用這個變數囉"

如果配合儲存等級, 就是說 "此變數的 scope 和 lifetime 是如 keyword 所指定的"

如果變數使用前沒有先宣告, 會有 undeclare 的錯誤

我覺得宣告最主要的作用就是把變數的 scope 和 lifetime 定出來

3. 定義 (definition)

例如: (auto) int a; // in block, 定義 + 宣告
int a; // out block, 定義 + 宣告
extern int a = 0; // out block, 定義 + 宣告 (其實 extern 是多餘的)

定義就是 memory or stack 配一個空間給變數, 一個變數當然只能有一個空間

local auto variable 是在 run-time 的時候由 stack 配給空間, 初值是隨機給的

其他的情況, 則是在程式開始執行的時候就佔有 memory 的空間, 初值是0

local static variable 如 { static int a = 5; } 只會在第一次定義時給初值

之後再碰到此敘述時, 會將其視為宣告, 而不會再做初始化的動作

定義有宣告的效果, 但是宣告沒有定義的效果

在同一個 scope 裡面, 定義只能有一次, 宣告則可以有很多次

例外: int a;
{
int a;
}

雖然第一個 int a; 的 scope 有觸及到 block 裡面

但是第二個 int a; 把第一個 int a; 的效果遮蔽掉了, 所以不能算定義兩次

如果變數在同一個 scope 裡定義兩次以上, 會有 redefine 的錯誤

如果變數只有宣告而沒有定義, 會有 undefine 的錯誤

4. 作用範圍 (scope)

作用範圍就是一個變數能觸及到的視野, 在變數的 scope 裡, 使用該變數都有效

每種 storage class 都有其自然視野(natural scope)

想要擴展變數的 scope, 就要使用 extern 宣告來增加其腹地

自然視野大致可分為 block scope, file scope 兩種

block scope 就是從變數宣告開始, 到 block 結束為止

file scope 就是從變數宣告開始, 到 file 結束為止

會發生 undeclare 的錯誤, 就是因為沒在某變數的 scope 裡使用該變數

5. 生命期 (lifetime)

生命期就是一個變數生存的時間, 當變數的 lifetime 過了

則這個變數就完全無效了, memory 裡的空間也就 free 掉了, 即使再宣告也沒用

會發生 undefine 的錯誤, 就是因為沒在某變數的 lifetime 裡使用該變數

會發生 redefine 的錯誤, 就是因為兩個同名的變數, 在同一時期生活在一起

這邊同樣要注意 block 的遮蔽效果, 可以讓兩個同名的變數生活在不同的世界

變數的生命期分兩種

一種是 local auto variable, 其生命期是從 stack 配空間開始, 到 block 結束為止

其他的情況, 都是從程式執行開始, 到程式結束為止

6. 儲存等級 (storage class)

儲存等級的 keyword: auto, static, extern, register

這邊不討論 register, 因為現在的 compiler 有時候比人還強, 比人更了解底層機器

而 extern 主要只是搭配 global variable 去拓展 scope 而已

剩下的兩個 keyword (auto, static), 再配上 block 的觀念, 只剩四種可能


| | |
in/out block | keyword | natural scope | lifetime
| | |
========================================================================
| | |
| (auto) int a; | block scope | to block end
| | |
local ----------------------------------------------------------
| | |
| static int a; | block scope | whole program
| | |
------------------------------------------------------------------------
| | |
| int a; | file scope | whole program
| | |
global ----------------------------------------------------------
| | |
| static int a; | file scope | whole program
| | (strictly) |
------------------------------------------------------------------------


※ static 在 local variable 的作用是改變 lifetime

※ static 在 global variable 的作用是影響 scope 擴展的限制

如果 global variable 沒有加 static 修飾, 則可以用 extern 跨 file 宣告

如果 global variable 有使用 static 修飾, 則不能用 extern 跨 file 宣告

所以利用 static 可以做到變數封裝的效果, 也就是 C++ class 的效果

※ extern 只對 global variable 有作用而已

※ 若在 block 內使用 extern, 則所增加的 scope 為 block scope

若在 block 外使用 extern, 則所增加的 scope 為 file scope

7. 函式 (function)

函式也是一個外在個體, 可以完全視為一個 global variable

以上所有適用於 global variable 的條例, 都適用於 function

8. 動態記憶體配置 (dynamic memory allocation)

動態記憶體配置一般是由 malloc 以及 free 這一對 C library function call 完成

最大的好處在於可以自由的指定配置時機, 以及自由的指定配置空間

動態記憶體配置只是一個經由 system call 向 OS 要記憶體的方式

所以它沒有宣告和定義的行為, 當然也沒有 lifetime 和 scope 的觀念

因此配置的空間從 malloc 開始, 到 free 掉為止, 都存在著

只要有指標指向這個空間, 就可以去存取, 一次存取的大小以指標的 data type 決定

而釋放記憶體空間時, 只要有指標指向這段空間的開頭, 再用 free 即可

9. 編譯 (compile)

編譯的時候, 是一次 compile 一個 file, 就算再怎麼大的程式

compiler 一次也只看一個檔案, 頂多先把一些 global variable 定義記起來

等到 link 階段的時候, 看看會不會有 redefine or undefine 的情況

所以要寫一個大程式, 只要注意幾件事

(1) 整個 program 裡面, 每個 global variable 都有定義, 而且只有定義一次

(2) 每個 file 裡面, 任何一個變數在使用前, 都有先宣告過

(3) 使用 local auto variable 時, 要注意其 lifetime

(4) 使用 extern 時, 該變數在別的地方要有定義

(5) 在 block 內可以利用 static 來增加 lifetime

(6) 在 block 外可以利用 static 來封裝資料

(7) 要注意 block 的遮蔽效果

(8) 在 .h 檔裡面, 要使用 ifndef, define 等條件式編譯, 避免 redefine 的情況
參考資料:
http://hatsukiakio.blogspot.tw/2009/04/c-static.html

linch0520 發表在 痞客邦 留言(0) 人氣()

1 2
Blog Stats
⚠️

成人內容提醒

本部落格內容僅限年滿十八歲者瀏覽。
若您未滿十八歲,請立即離開。

已滿十八歲者,亦請勿將內容提供給未成年人士。