x86_32栈的调用结构
来源:互联网 发布:自拍哪个软件最好 编辑:程序博客网 时间:2024/06/11 02:24
下面将通过一段代码分析x86_32栈的使用方法,程序运行后不停的重新调用main函数重新运行。
原理:
In x86_32, When one function named ‘function_A’
call another function named ‘function_B’
the function_B’s stack look like below:
Parameter #N <—- N*4+4(%ebp)
…
Parameter #2 <—- 12(%ebp)
Parameter #1 <—- 8(%ebp)
Return Address <—- 4(%ebp)
Old %ebp <—- (%ebp)
Local Variable 1 <—- -4(%ebp)
Local Variable 2 <—- -8(%ebp)
…
So, We can’t use Paremeter or local variable get the address which store the
Return Address and change it.
#include <stdio.h>void modify_return_address(int num);int main(int argc, const char **argv){ printf("%s %d\n", __func__, __LINE__); modify_return_address(1); printf("%s will return\n", __func__); return 0;}void modify_return_address(int num){ int *return_address = (int *)((char *)(&num) - 4); *return_address = (int )(main); return; }
0 0
- x86_32栈的调用结构
- 结构体调用结构体的函数
- IA32的栈帧结构和函数调用过程
- C语言函数调用时的栈帧结构变化
- 函数调用栈帧结构
- scala 新的控制结构,函数调用结构的变化
- 结构控制语句与函数的调用
- 递归调用,遍历CTreeCtrl的树形结构
- 审视WMI的结构,COM调用
- 函数调用时的堆栈结构分析
- go的自定义结构跨包调用
- 两个结构体之间的相互调用
- 两个结构体之间的相互调用
- 关于C++结构体的函数调用
- 函数调用时的栈帧结构以及临时变量的深入研究
- Add a system call on x86_32 arch
- 在x86_32环境下编译x86_64linux内核
- 笔试---函数调用时的参数传递和栈帧结构问题
- html标签大全(2)
- HDU 4825 Xor Sum [trie]【思维&字符串】
- 【大话设计模式】概览
- mysql子查询必须加上别名,否则无法执行
- 上线即获千万投资,迅云强大潜力引业界瞩目
- x86_32栈的调用结构
- linux驱动之字符设备
- 百度手机搜索返回键跳转,百度霸屏精灵,假百度手机搜索劫持跳转
- 问题三十六:ray tracing中的Inverse Mapping(5)——圆锥面Inverse Mapping
- Leetcode——203. Remove Linked List Elements
- 香蕉派日记——使用百度语音API
- 类:基础
- AFN的再封装
- 目标跟踪学习算法DSST