一步一步走进Linux HOOK API(五)

一步一步走进Linux HOOK API()

这一讲中,我们不在继续进入研究动态符号表的获取了,今天咱们来点实战的话题,对于前面我们研究的那么多知识,做一次总结.来看看这些节表之间是怎么联系起来的.最后我们将经过一个简单的拦截printf函数,修改它的参数,来输出我指定的字符串,这样就达到简单的hook api的目的.好了废话不多说.先看看main.c里面的代码.

#include <stdio.h>
#include <fcntl.h>
int main()
{
while(1)
{
getchar();
printf("hello");
fflush(stdout);
}
return 0;
}


这段代码很简单,敲一个回车就输出一个hello,我们的目的就是实现,敲一个hello让他输出我们指定的字符串.

首先先运行这个main程序.在另一个终端里面输入ps -a 查看main 的进程ID.一会我们用GDB手动修改的时候要attach 连接他的进程 ID.

$ ps -a

  PID TTY          TIME CMD

 2068 pts/0    00:00:00 sudo

 2069 pts/0    00:00:00 su

 2077 pts/0    00:00:00 bash

 2174 pts/0    00:00:00 dbus-launch

 4803 pts/2    00:00:00 sudo

 4805 pts/2    00:00:00 su

 4813 pts/2    00:00:00 bash

 5282 pts/1    00:00:00 linux_server

 5774 pts/2    00:00:00 man

 5784 pts/2    00:00:00 pager

 6256 pts/4    00:00:00 sudo

 6257 pts/4    00:00:00 su

 6265 pts/4    00:00:00 bash

 6275 pts/4    00:00:00 main

 6276 pts/3    00:00:00 ps

 

这里是获取main 程序的进程空间的映射,找到未被使用的空间来写入我们指定的字符串,这里使用的指令是:

cat /proc/6275/maps

00258000-00274000 r-xp 00000000 08:01 918417     /lib/i386-linux-gnu/ld-2.13.so

00274000-00275000 r--p 0001b000 08:01 918417     /lib/i386-linux-gnu/ld-2.13.so

00275000-00276000 rw-p 0001c000 08:01 918417     /lib/i386-linux-gnu/ld-2.13.so

0058f000-00590000 r-xp 00000000 00:00 0          [vdso]

00cf6000-00e50000 r-xp 00000000 08:01 918430     /lib/i386-linux-gnu/libc-2.13.so

00e50000-00e51000 ---p 0015a000 08:01 918430     /lib

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值