c语言主程序调子程序怎么调,月光软件站 - 编程文档 - 其他语言 - 一次无聊的尝试----用C语言,在子程序里修改主程序的局部变量....

/*

文件名:cvar.cpp

环境:win2k sp4+vc6

作者: Vical Lee

完成日期:2004-9-12 晨1:00

版本:1.0

描述:测试如何在子程序里修改主程序的局部参数.

*/

#include

#include

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

down_info.asp?id=23644

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值