Linux下多线程程序崩溃时怎么提取出所有线程的函数调用栈

Linux下多线程程序崩溃时怎么提取出所有线程的函数调用栈,第1张

参考文章:>

函数调用需要保护EIP和EBP

这两个寄存器很重要,溢出攻击中很重要的一点就是定位溢出点进行覆盖跳转的,否则就只能使目标程序崩溃而已,至于控制是要交给shellcode完成的

最后就楼主的问题讲下,首先函数调用完毕后要恢复EBP和EIP的,我们知道EIP中保存着下一条即将执行的机器指令的地址,如果我们定位EIP后定位覆盖(用我们溢出的数据)/计算机是不能区分数据和指令的,我们忽悠下/,改成JMP ESP或者其他的跳转方式跳转到我们的shellcode,而shellcode中保存着我们精心设计的机器码,那么籍此可以获得计算机的部分或全部控制权

这只是思路,具体 *** 作还是很要求技术的,可以参看XFOCUS的牛著网络渗透技术,也可以看shellcode界的九阴真经shellcoder's handbook

(~ o ~)~zZ偶语文不好,可能表达的不好,楼主可以参看以上的参考书,里面讲的不错

希望能够帮助你 ^_^ 也希望能够选为最佳答案!

比如:void fun(int a,int b,int c); 调用fun(1,2,3);

调用时:

-将断点程序指针压入堆栈

-将3,2,1顺序压入堆栈,并指定参数变量指针到堆栈,参数存放位置即为参数变量位置

-压栈保存现场

-执行函数

-d栈恢复现场

-堆栈指针减掉参数占用字节数,舍弃堆栈中的参数

-d栈断点程序指针加上调用语句字节数继续执行

可以直接用输出在函数内部调用时,把调用顺序打印出来。 一、一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 *** 作方式类似于数据结构中的栈。

以上就是关于Linux下多线程程序崩溃时怎么提取出所有线程的函数调用栈全部的内容,包括:Linux下多线程程序崩溃时怎么提取出所有线程的函数调用栈、c++栈标准库函数怎么调用、函数的调用过程就是对栈空间的 *** 作过程,是如何 *** 作的呢求详细 *** 作步骤等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9268230.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存