From e9aa7a1e627ee841745a6c1fc487d8876787a673 Mon Sep 17 00:00:00 2001 From: "qcqcqc@wsl" <1220204124@zust.edu.cn> Date: Thu, 10 Apr 2025 13:31:56 +0800 Subject: [PATCH] load_config --- .vscode/settings.json | 5 ++- build/config.o | Bin 9864 -> 9728 bytes build/execve_interceptor.o | Bin 17696 -> 16808 bytes build/init_cleanup.o | Bin 9832 -> 7816 bytes build/intercept.so | Bin 58664 -> 57784 bytes logs/execve.log | 73 ------------------------------------- logs/execve_out.log | 21 ----------- src/config.c | 40 ++++++++++---------- src/config.h | 4 +- src/exec_hook.h | 9 +---- src/execve_interceptor.c | 19 ++++++---- src/init_cleanup.c | 6 +-- src/struct.h | 2 +- tests/shm_reader.c | 2 +- 14 files changed, 41 insertions(+), 140 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 2ae650d..a62f712 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -20,7 +20,10 @@ "signal_handlers.h": "c", "terminal_utils.h": "c", "stdlib.h": "c", - "init_cleanup.h": "c" + "init_cleanup.h": "c", + "stdbool.h": "c", + "stat.h": "c", + "debug.h": "c" }, "C_Cpp.errorSquiggles": "disabled" } \ No newline at end of file diff --git a/build/config.o b/build/config.o index 51c497899031e9b3ff7038e3c97a479deb88d379..f2389113f7a1d61cf06d8c1964a243b94b6e90ae 100644 GIT binary patch delta 3406 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 diff --git a/build/execve_interceptor.o b/build/execve_interceptor.o index 84a2c4efd799f36f686818d5ab90590443b2c7bf..368d94b4e6a601d26071c4292a2b8780cfab9303 100644 GIT binary patch literal 16808 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 literal 58664 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 diff --git a/logs/execve.log b/logs/execve.log index 697596d..e69de29 100644 --- a/logs/execve.log +++ b/logs/execve.log @@ -1,73 +0,0 @@ -[Thu Apr 10 10:26:49 2025 -] Command: /usr/bin/lesspipe -arg[0]: lesspipe -[Thu Apr 10 10:26:49 2025 -] Command: /usr/bin/dircolors -arg[0]: dircolors -arg[1]: -b -[Thu Apr 10 10:26:50 2025 -] Command: /usr/bin/ls -arg[0]: ls -arg[1]: --color=auto -arg[2]: -CF -[Thu Apr 10 10:26:55 2025 -] Command: /usr/bin/ls -arg[0]: ls -arg[1]: --color=auto -[Thu Apr 10 10:27:07 2025 -] Command: /usr/bin/lesspipe -arg[0]: lesspipe -[Thu Apr 10 10:27:07 2025 -] Command: /usr/bin/dircolors -arg[0]: dircolors -arg[1]: -b -[Thu Apr 10 10:27:09 2025 -] Command: /usr/bin/ls -arg[0]: ls -arg[1]: --color=auto -arg[2]: -CF -[Thu Apr 10 10:39:27 2025 -] Command: /bin/lesspipe -arg[0]: lesspipe -[Thu Apr 10 10:39:27 2025 -] Command: /bin/dircolors -arg[0]: dircolors -arg[1]: -b -[Thu Apr 10 10:39:28 2025 -] Command: /bin/ls -arg[0]: ls -arg[1]: --color=auto -arg[2]: -CF -[Thu Apr 10 10:39:41 2025 -] Command: /usr/lib/command-not-found -arg[0]: /usr/lib/command-not-found -arg[1]: -- -arg[2]: nvidia-smi -[Thu Apr 10 10:40:28 2025 -] Command: /bin/lesspipe -arg[0]: lesspipe -[Thu Apr 10 10:40:28 2025 -] Command: /bin/dircolors -arg[0]: dircolors -arg[1]: -b -[Thu Apr 10 10:40:29 2025 -] Command: /bin/ls -arg[0]: ls -arg[1]: --color=auto -arg[2]: -CF -[Thu Apr 10 10:43:39 2025 -] Command: /bin/ls -arg[0]: ls -arg[1]: --color=auto -[Thu Apr 10 10:45:00 2025 -] Command: /bin/lesspipe -arg[0]: lesspipe -[Thu Apr 10 10:45:00 2025 -] Command: /bin/dircolors -arg[0]: dircolors -arg[1]: -b -[Thu Apr 10 10:45:01 2025 -] Command: /bin/ls -arg[0]: ls -arg[1]: --color=auto -arg[2]: -CF diff --git a/logs/execve_out.log b/logs/execve_out.log index c8ad028..e69de29 100644 --- a/logs/execve_out.log +++ b/logs/execve_out.log @@ -1,21 +0,0 @@ - [DEBUG][PID 12935] src/pty_dup.c:43:dupIO(): forkpty result is: 0. - [DEBUG][PID 12935] src/pty_dup.c:50:dupIO(): Child process ready. -Makefile README.md build/ config/ logs/ output.txt src/ test_bash.sh* tests/ - [DEBUG][PID 13023] src/pty_dup.c:43:dupIO(): forkpty result is: 0. - [DEBUG][PID 13023] src/pty_dup.c:50:dupIO(): Child process ready. -Makefile README.md build config logs output.txt src test_bash.sh tests - [DEBUG][PID 13349] src/pty_dup.c:43:dupIO(): forkpty result is: 0. - [DEBUG][PID 13349] src/pty_dup.c:50:dupIO(): Child process ready. -Makefile README.md build/ config/ logs/ output.txt src/ test_bash.sh* tests/ - [DEBUG][PID 26525] src/pty_dup.c:43:dupIO(): forkpty result is: 0. - [DEBUG][PID 26525] src/pty_dup.c:50:dupIO(): Child process ready. -Makefile README.md build/ config/ logs/ output.txt src/ test_bash.sh* tests/ - [DEBUG][PID 27494] src/pty_dup.c:43:dupIO(): forkpty result is: 0. - [DEBUG][PID 27494] src/pty_dup.c:50:dupIO(): Child process ready. -Makefile README.md build/ config/ logs/ output.txt src/ test_bash.sh* tests/ - [DEBUG][PID 30654] src/pty_dup.c:43:dupIO(): forkpty result is: 0. - [DEBUG][PID 30654] src/pty_dup.c:50:dupIO(): Child process ready. -Makefile README.md build config logs output.txt src test_bash.sh tests - [DEBUG][PID 32199] src/pty_dup.c:43:dupIO(): forkpty result is: 0. - [DEBUG][PID 32199] src/pty_dup.c:50:dupIO(): Child process ready. -Makefile README.md build/ config/ logs/ output.txt src/ test_bash.sh* tests/ diff --git a/src/config.c b/src/config.c index 227cfaa..47a205f 100644 --- a/src/config.c +++ b/src/config.c @@ -8,31 +8,29 @@ #include "debug.h" -// Global variables (defined in execve_interceptor.c) -extern ConfigData *shared_config; -extern int shm_id; +ConfigData *load_config() { + ConfigData *shared_config; + // First load, attach to shared memory in read-only mode + DEBUG_LOG("Attaching to shared memory for config data"); -void load_config_if_needed() { - if (shared_config == NULL) { - // First load, attach to shared memory - DEBUG_LOG("Attaching to shared memory for config data"); - shm_id = shmget(SHM_KEY, sizeof(ConfigData), 0644); + // 不指定大小,让shmget自动获取已存在的共享内存段大小 + int shm_id = shmget(SHM_KEY, SHM_SIZE, 0); // 把size参数设为0 - DEBUG_LOG("shm_id is: %d", shm_id); + DEBUG_LOG("shm_id is: %d", shm_id); - if (shm_id == -1) { - perror("shmget failed"); - return; - } - - shared_config = (ConfigData *)shmat(shm_id, NULL, 0); - if (shared_config == (void *)-1) { - perror("shmat failed"); - shared_config = NULL; - return; - } - DEBUG_LOG("Successfully attached to shared memory"); + if (shm_id == -1) { + perror("shmget failed"); + return NULL; } + shared_config = (ConfigData *)shmat(shm_id, NULL, SHM_RDONLY); + if (shared_config == (void *)-1) { + perror("shmat failed"); + DEBUG_LOG("Call shmat failed."); + shared_config = NULL; + return NULL; + } + DEBUG_LOG("Successfully attached to shared memory"); DEBUG_LOG("Current configuration has %d rules", shared_config->rule_count); + return shared_config; } \ No newline at end of file diff --git a/src/config.h b/src/config.h index 73cbd3a..c62285c 100644 --- a/src/config.h +++ b/src/config.h @@ -3,8 +3,6 @@ #include "exec_hook.h" -int load_config_to_shm(); -int config_file_modified(); -void load_config_if_needed(); +ConfigData *load_config(); #endif // CONFIG_H \ No newline at end of file diff --git a/src/exec_hook.h b/src/exec_hook.h index b3575a0..98f95d3 100644 --- a/src/exec_hook.h +++ b/src/exec_hook.h @@ -40,12 +40,7 @@ #define ANSI_COLOR_RESET "\033[0m" #define ANSI_COLOR_BLUE "\x1b[34m" -#define SHM_KEY 789357 - -// Global variable, pointing to the configuration data in shared memory -extern ConfigData *shared_config; -extern int shm_id; -extern time_t last_modified_time; -// extern int is_initialized; +#define SHM_KEY 0x78945 +#define SHM_SIZE 512 * 1024 #endif // EXEC_HOOK_H \ No newline at end of file diff --git a/src/execve_interceptor.c b/src/execve_interceptor.c index e39b3ca..ac35352 100644 --- a/src/execve_interceptor.c +++ b/src/execve_interceptor.c @@ -15,12 +15,6 @@ #include "rules.h" #include "utils.h" -// Global variables (declared in exec_hook.h and defined here) -ConfigData *shared_config = NULL; -int shm_id = -1; -time_t last_modified_time = 0; -// int is_initialized = 0; - #ifdef HOOK // Original pointer orig_execve_type orig_execve = NULL; @@ -77,7 +71,8 @@ int enhance_execve(const char *filename, char *const argv[], #endif // Load configuration (only if needed) - load_config_if_needed(); + ConfigData *shared_config; + shared_config = load_config(); DEBUG_LOG("Loaded done."); @@ -117,6 +112,16 @@ int enhance_execve(const char *filename, char *const argv[], #endif } + // 如果rule是0,也直接返回 + if (shared_config->rule_count == 0) { +#ifdef HOOK + return orig_execve(filename, argv, envp); +#else + return execve(filename, argv, envp); + // return 1; +#endif + } + write_log(filename, argv); const char *basename = argv[0]; diff --git a/src/init_cleanup.c b/src/init_cleanup.c index dcab9c4..e8ddda0 100644 --- a/src/init_cleanup.c +++ b/src/init_cleanup.c @@ -5,10 +5,6 @@ #include #include -// Global variables (defined in execve_interceptor.c) -extern ConfigData *shared_config; -extern int shm_id; - // // Constructor, executed when the library is loaded // __attribute__((constructor)) static void initialize() { // if (is_initialized) return; @@ -24,7 +20,7 @@ __attribute__((destructor)) void cleanup_shared_memory() { // Log output paths DEBUG_LOG("Log file: %s", LOG_FILE); DEBUG_LOG("Log out file: %s", LOG_OUT_FILE); - DEBUG_LOG("Shared memory ID: %d", shm_id); + // DEBUG_LOG("Shared memory ID: %d", shm_id); // if (shared_config != NULL) { // DEBUG_LOG("Cleaning up shared memory."); // // Detach shared memory segment diff --git a/src/struct.h b/src/struct.h index cf33a9e..ebbba4a 100644 --- a/src/struct.h +++ b/src/struct.h @@ -2,7 +2,7 @@ #define STRUCT_H #define _GNU_SOURCE -#define MAX_RULES 100 +#define MAX_RULES 128 #define MAX_ARGS 10 typedef struct { diff --git a/tests/shm_reader.c b/tests/shm_reader.c index fe254f3..c7184d5 100644 --- a/tests/shm_reader.c +++ b/tests/shm_reader.c @@ -7,7 +7,7 @@ #include #include -#define SHM_KEY 12345 +#define SHM_KEY 0x78945 #define MAX_RULES 100 #define MAX_ARGS 10