应用调试-----自制系统调用、编写进程查看器
syscalls.h
read_write.c
calls.S
解析:当应用程序调用open、read、write函数时会执行swi val指令,从而引发一个异常,就像中断一样,就会进入内核的异常处理函数里面,根据不同的val值来调用sys_open、sys_read、sys_write(虚拟文件系统VFS),并根据操作不同的文件属性(C:字符型设备,主设备号)在chrdev数组中找到file_operations类型的结构体指针,通过file_operations结构体指针找到对应的open、read、write(first_drv_open,first_drv_write)驱动函数。可以利用驱动程序查看应用程序当中全局变量、局部变量的信息,并打印出来。
故首先在calls.S 中:
// 350
CALL(sys_timerfd)
CALL(sys_eventfd)
CALL(sys_hello)
再在read_write.c 中实现sys_hello函数体:
asmlinkage void sys_hello(const char __user * buf, int count)
{
}
在syscalls.h中声明:
再仿照glib.c中open、read等仿写hello函数:
void hello(char *buf, int count)
{
}
再在应用程序中调用hello函数:
int main(int argc, char **argv)
{
}
以上只是在应用程序调用hello函数时发生SWI中断后利用驱动程序sys_hello打印传入的字符串,也可以修改应用程序编译后产生可执行文件中的机器码,替换成swi指令,利用swi指令进入sys_hello,在sys_hello中打印观察应用程序当中的变量信息,再执行被替换的指令后返回,如下:
asmlinkage void sys_hello(const char __user * buf, int count)
{
}
被用于测试的应用程序如下:
while (1)
{
}
修改了可执行文件的
应用调试系统调用编写进程查看 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)