sys exit 呼び出しを変数に設定しようとしています
extern void *sys_call_table[];
real_sys_exit = sys_call_table[__NR_exit]
ただし、作成しようとすると、コンソールにエラーが表示されます
error: ‘__NR_exit’ undeclared (first use in this function)
どんなヒントでもいただければ幸いです:)ありがとう
sys exit 呼び出しを変数に設定しようとしています
extern void *sys_call_table[];
real_sys_exit = sys_call_table[__NR_exit]
ただし、作成しようとすると、コンソールにエラーが表示されます
error: ‘__NR_exit’ undeclared (first use in this function)
どんなヒントでもいただければ幸いです:)ありがとう
カーネル2.6.xを使用しているため、sys_call_tableはエクスポートされなくなります。コンパイルエラーを回避したい場合は、これを含めてみてください
#include<linux/unistd.h>
ただし、動作しません。したがって、sys_call_tableを「再生」するための回避策は、次のコマンドを使用してSystemXXXX.map(/ bootにあります)でsys_call_tableのアドレスを見つけることです。
grep sys_call System.map-2.6.X -i
これによりアドレスが提供され、次のコードでテーブルを変更できるようになります。
unsigned long *sys_call_table;
sys_call_table = (unsigned long *) simple_strtoul("0xc0318500",NULL,16);
original_mkdir = sys_call_table[__NR_mkdir];
sys_call_table[__NR_mkdir] = mkdir_modificado;
それがあなたのために働くことを願っています、私はカーネル2.6.24の下でそれをテストしたばかりなので、2.6.18で働くはずです
こちらもチェックしてください。非常に優れた http://commons.oreilly.com/wiki/index.php/Network_Security_Tools/Modifying_and_Hacking_Security_Tools/Fun_with_Linux_Kernel_Modules
ファイル syscall.h をインクルードしていない場合は、__NR_exit への参照の前にインクルードする必要があります。例えば、
#include <syscall.h>
#include <stdio.h>
int main()
{
printf("%d\n", __NR_exit);
return 0;
}
戻り値:
$ cc t.c
$ ./a.out
60
その他の観察事項:
ファイルを既にインクルードしている場合、通常の理由は、条件付きコンパイル (またはどこかで作業中) のために__NR_exit
定義が無視されたか、 .#ifdef
#ifndef
#undef
カーネル スペース用のコードを作成している場合は、使用するヘッダーのセットがまったく異なります。LXR ( http://lxr.linux.no/linux ) のカーネル ソースの検索および参照可能なアーカイブは、役立つリソースです。