# 2021q3 Homework1 (quiz1)
contributed by < `ChunYoLin` >
實驗平台
| CPU | Distro | Kernel |
| -------- | -------- | -------- |
| i7-6700 | Ubuntu 21.04-LTS | 5.11.0-25-generic |
## 1. 解釋上述程式碼運作原理,包含 ftrace 的使用
### `interface`
使用character device 作為介面, device_write parse使用者輸入, 針對add做hide_process, del做unhide_process
### `init_hook`
init_hook 初始化ftrace_hook成員, 主要利用 `kallsyms_lookup_name` 找到 `find_ge_pid` 並寫入hook的成員orig pointer.
### `hook_install`
- 這裡再一次的使用 `kallsyms_lookup_name` 去assign orig pointer, 不太理解為何需要再做一次, 這裡多了error handling, init_hook 的assign或許可以不需要.
- `hook_install` 初始化`ftrace_ops`, `ftrace_ops`的成員`func`為此`ftrace`的callback function, 這裡將 `hook_ftrace_thunk` assign給他.
- `ftrace_set_filter_ip` 使得`hook->ops` only be called from function of `hook->address`
>If a callback is only to be called from specific functions, a filter must be set up. The filters are added by name, or ip if it is known.
- `register_ftrace_function` to enable `hook->ops`, 若失敗使用 `ftrace_set_filter_ip`將remove parameter設成1來回復先前的註冊
### `hook_ftrace_thunk`
- 更改regs->ip來使得function call jump to `hook_find_ge_pid` instead of original `find_ge_pid`.
### `hook_find_ge_pid`
jj
## 2. 本程式僅在 Linux v5.4 測試,若你用的核心較新,請試著找出替代方案
## 3. 本核心模組只能隱藏單一 PID,請擴充為允許其 PPID 也跟著隱藏,或允許給定一組 PID 列表,而非僅有單一 PID
## 4. 指出程式碼可改進的地方,並動手實作