程序运行 栈帧分析 以及 修改栈帧中数据以及函数地址

1 在栈帧中 修改函数调用地址 使得程序运行 跳转到 自己指定的函数 而原程序的作者完全不知道这段程序的执行中已经执行了别人的代码【可能是恶意的】

2 修改栈帧中的变量的值 不通过变量名

如 修改变量b的值 不通过变量b的名称 【这需要对变量在栈帧中的分布有一定的了解 】

压栈是 a先压栈 b后压栈 压栈时 栈顶向低地址方向前进

变量a在变量b的上面

变量a的地址 0xbfa92d88

变量b的地址 0xbfa92d84

时间: 2024-10-16 20:57:04

程序运行 栈帧分析 以及 修改栈帧中数据以及函数地址的相关文章

Linux中程序的栈帧分析以及修改函数地址

下面有一段代码: #include <stdio.h> #include <unistd.h> #include <stdlib.h> void fun() {    printf("i am the evil func\n");    exit(1); } int fun1(int a,int b) {     int *p=&a;     p--;     *p=fun;     int c=0xcccc;     return c; }

Linux内核--网络栈实现分析(六)--应用层获取数据包(上)

本文分析基于内核Linux 1.2.13 原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7541907 更多请看专栏,地址http://blog.csdn.net/column/details/linux-kernel-net.html 作者:闫明 注:标题中的”(上)“,”(下)“表示分析过程基于数据包的传递方向:”(上)“表示分析是从底层向上分析.”(下)“表示分析是从上向下分析. 上篇博文分析了传输层从网络层获取数据包后将

Tarjan中栈的分析与SLT栈的实现

首先看一下手写的栈: 1 do{ 2 printf("%d ",stack[index]); 3 visit[stack[index]]=0; 4 index--; 5 }while(x!=stack[index+1]);//出栈,并且输出. 6 printf("\n"); 我们可以发现.x是与index的上一个元素比较的 举个例子 栈:1 3 2 4 5     x=2 这样的话会输出 5  4   2 但是stl不支持和栈顶的上一个元素比较,因为上一个元素一定是

Linux内核--网络栈实现分析(八)--应用层发送数据(下)

本文分析基于Linux Kernel 1.2.13 原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7547826 更多请查看专栏,地址http://blog.csdn.net/column/details/linux-kernel-net.html 作者:闫明 注:标题中的”(上)“,”(下)“表示分析过程基于数据包的传递方向:”(上)“表示分析是从底层向上分析.”(下)“表示分析是从上向下分析. 下面是发送数据的流程: 应用层

如何修改报表平台中数据决策系统登陆地址

用FineRepor搭建的数据决策系统,系统自动生成的地址一般都比较长,比如原来的登陆地址:http://196.128.1.2/WebReport/ReportServer?op=fs,地址太长不易记忆,这就产生了一个问题:如何实现直接在在浏览器输http://196.128.1.2就能访问数据决策系统? 对于这个问题,一般有两个解决思路: 一.设置跳转 在FineReport服务器的初始加载页面进行跳转,这个方法技术上比较容易实现,具体实现方法也多样,就不赘述了. 二.iframe嵌入 修改

DataSet用法一:添加代码创建的表DataTable,设置主键外键,读取及修改DataSet表中数据

原文发布时间为:2008-08-01 -- 来源于本人的百度文章 [由搬家工具导入] using System;using System.Data;using System.Configuration;using System.Collections;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebContro

一起talk GDB吧(第六回:GDB修改程序运行环境)

各位看官们,大家好,上一回中我们说的是GDB查看信息的功能,并且说了如何使用GDB查看程序运行时的 信息.这一回中,我们继续介绍GDB的调试功能:修改程序运行环境.当然了,我们也会介绍如何使用GDB 修改程序运行环境.闲话休提,言归正转.让我们一起talk GDB吧! 大家都知道程序运行时需要一个运行的环境,比如从系统中分配内存,让程序读取一些数据等等.我们接 下来说一说,如何修改程序的运行环境,这样可以让程序按照我们我要求来运行.在修改程序运行环境中 最常用的是修改变量的值. 作为一款优秀的调

java程序运行原理

一.JRE.JDK.JVM 要了解java程序运行原理,首先需要了解知道jre.jdk.jvm这三者是什么,他们之间又有什么联系. JRE(JavaRuntimeEnvironment,Java运行环境),也就是Java平台.所有的Java 程序都要在JRE下才能运行. JDK(Java Development Kit,java开发工具包)是程序开发者用来来编译.调试java程序用的开发工具包.JDK的工具也是Java程序,也需要JRE才能运行.为了保持JDK的独立性和完整性,在JDK的安装过程

C语言中内存分布及程序运行中(BSS段、数据段、代码段、堆栈)

BSS段:(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域.BSS是英文Block Started by Symbol的简称.BSS段属于静态内存分配. 数据段 :数据段(data segment)通常是指用来存放程序中 已初始化 的 全局变量 的一块内存区域.数据段属于静态内存分配. 代码段: 代码段(code segment/text segment)通常是指用来存放 程序执行代码 的一块内存区域.这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于