一次无聊的尝试----用C语言,在子程序里修改主程序的局部变量.

类别:编程语言 点击:0 评论:0 推荐:

/*
文件名:cvar.cpp
环境:win2k sp4+vc6
作者: Vical Lee
完成日期:2004-9-12 晨1:00
版本:1.0
描述:测试如何在子程序里修改主程序的局部参数.
*/

#include <stdio.h>
#include <string.h>

void foo(void);

int main(int argc, char* argv[])
{
 int a = 3, b = 4;
 char c = 'a';
 char *d = "b";
 long e = 2;
 float f = 3.0;
 foo();
 printf("a=%d\t b=%d\t c=\'%c\'\t d=%08X \"\"\t e=%ld\t f=%f\n",
   a, b, c, d, e, f);
}

void foo(void)
{
  int paramcount = 0;
  char *p;
  _asm{
 push edi;
 mov edi, [ebp];/*取得主程序的EBP;*/
 mov p, edi;
 sub edi, ebp;/*主程序的esp==现在的ebp+返回地址栈位+原ebp栈位.即esp==ebp+2*4 */
 sub edi, 4*5;/*程序保存了返回地址,ebp,ebx,esi,edi共占5个栈位,*/
    /*故再减5个栈位可取得主程序局部参数所占字节数*/
 mov paramcount, edi;
 sub p, edi;/*P即为主程序局部参数起始地址了.*/
 pop edi;
  }
  memset(p, 0, paramcount);/*把它全部置0算了,极其危险的作法,如果主程里malloc了,就
                           会导致主程序访问*(NULL),产生0址访问异常.*/
}

输出:

a=0      b=0     c=' '   d=00000000 ""   e=0     f=0.000000

本文地址:http://com.8s8s.com/it/it27524.htm