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

王朝c/c++·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

/*

文件名: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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航