Hacker基础之Linux篇:进阶Linux命令二

小姐姐最大

Hacker基础之Linux篇:进阶Linux命令二

今天我们进入Linux进阶的第二课


Linux C程序的调试


这里我们会解释一下怎样在Linux下调试C程序


可能有的同学会问,这和Hacker有什么关系呢?


因为吧,简单说,这其实就是Linux PWN技术的基础


<PWN>是一个黑客语法的俚语词,是指攻破设备或者系统


发音类似<砰>,对黑客而言,这就是成功实施黑客攻击的声音,砰的一声,被<黑>的电脑或手机就被你操纵了


以上抄自某度


通过二进制/系统调用等方式获得目标主机的shell


Windows上的PWN,当然也有Linux上的PWN,但是相比较Windows丰富的调试工具,Linux上就显得”寒酸”多了(我是打双引号的啊,大家别打我~~~)


Windows上有大家熟悉的OD啊,IDA啊等等,大家都很熟悉了,现在我们就介绍一下Linux上的调试工具


Hacker基础之Linux篇:进阶Linux命令二

gdb


这个神器gdb的全称是(GNU Debugger),是一个可移植的调试器,可运行在许多类Unix系统上,可用于许多编程语言,包括AdaCC++Objective-CFree PascalFortranGoJava


他的作者Richard StallmanGNU的提出者和创建者,Linux是属于GNU的一个项目


反正很牛x就对了


如何使用gdb


首先我们要在编译的时候加入-g选项,才能很好的使用gdb,当然,不加也是可以使用的


这里我用一个C程序来演示使用gdb


这里先列出gdb的一些基本命令


break – b          #设置断点

run – r              #运行程序

next – n            #单步调试

print var1        #查看变量的值

list – l              #显示源码

info b             #显示断点设置情况


ok,我们开始,假设我在本地有个1.c的程序


我们先编译它


gcc 11.c -o 11 -g -Wall


这里稍微解释一下


-o是将创建的可执行文件命令为11的意思


-g是我们要求编译的时候加入调试信息


-Wall是显示所有的错误和提醒


这对于Linux C程序猿很熟悉了我就不班门弄斧了


Hacker基础之Linux篇:进阶Linux命令二

编译的结果是这样的,这里有个warning是因为我返回了一个局部变量


一般要在调用程序里面要专门申请一个空间传入被调用函数中


然后将返回值写入这个空间中才是比较稳妥的写法


因为这里是我N年前写的代码了,我们就不管这个warning


之后我们用gdb打开这个可执行文件11


Hacker基础之Linux篇:进阶Linux命令二


我们可以试试我们上面的命令,比如显示源码


Hacker基础之Linux篇:进阶Linux命令二


或者在main函数设置一个断点(bbreak的缩写)


Hacker基础之Linux篇:进阶Linux命令二


这里就会在第六行也就是mian函数的下一行有了一个断点


更多的gdb的知识,大家可以google或者bing


Hacker基础之Linux篇:进阶Linux命令二

pstack

pstack是个脚本工具,可显示每个进程的栈跟踪


他的功能在gdb中也有相应的实现


我们演示一下基本的使用(我们要预先用ps知道目标进程的PID


pstack 19703


Hacker基础之Linux篇:进阶Linux命令二


Hacker基础之Linux篇:进阶Linux命令二

starce


strace常用来跟踪进程执行时的系统调用和所介绍到的信号


Linux中,进程不能直接访问硬件设备,当进程需要访问硬件设备时(读取磁盘文件,接受网络数据等等),必须由用户态模式切换到内核态模式


然后通过系统调用访问硬件设备


strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗时间等等


strace -o out.txt -T -tt -e trace=all -p 19703


上面程序的意思是跟踪进程19703的所有的系统调用,并统计系统调用时间,以及开始时间,最后将结果记录在out.txt


执行一段时间之后我们可以打开out.txt查看


Hacker基础之Linux篇:进阶Linux命令二


或者我们可以查看实时输出


strace -p 19703


Hacker基础之Linux篇:进阶Linux命令二

nm


nm命令是用来列出目标文件的符号清单


拿我们刚刚的11可执行文件演示


Hacker基础之Linux篇:进阶Linux命令二


我们看到的就是一个程序的结构


nm程序可用于列举符号和其类型和值,但是,要更仔细的研究目标文件中这些命名段的内容,我们需要使用更强大的工具,我们下一节介绍


Hacker基础之Linux篇:进阶Linux命令二


Hacker基础之Linux篇:进阶Linux命令二


本文完


Hacker基础之Linux篇:进阶Linux命令二


Hacker基础之Linux篇:进阶Linux命令二


Hacker基础之Linux篇:进阶Linux命令二

Hacker基础之Linux篇:进阶Linux命令二


Hacker基础之Linux篇:进阶Linux命令二
Hacker基础之Linux篇:进阶Linux命令二

Hacker基础之Linux篇:进阶Linux命令二


发表评论

电子邮件地址不会被公开。 必填项已用*标注