C语言综合研究与高强度程序设计训练 2

编程入门 行业动态 更新时间:2024-10-26 10:27:00

C语言综合研究与高强度<a href=https://www.elefans.com/category/jswz/34/1771020.html style=程序设计训练 2"/>

C语言综合研究与高强度程序设计训练 2

C语言综合研究与高强度程序设计训练 2

编写程序

int a;

void f1(void)

{

  a=1;

}

void f2(void)

{

  a=2;

}

void f3(void)

{

  a=3;

}

main()

{

  printf("f1: %lx\n",(long)f1);

  printf("f2: %lx\n",(long)f2);

  printf("f3: %lx\n",(long)f3);

  printf("main: %lx\n",(long)main);

}

通过编译链接后我们可以看到各个函数的地址;





通过Debug加载后可以看到汇编代码:

通过代码可以得知,函数的地址代码是cs和偏移地址组成的.

也可以直接打印出段地址和偏移地址;

main()

{

  printf("CS:%x\n",_CS);

  printf("f1:%x\n",f1);

  printf("f2:%x\n",f2);

  printf("f3:%x\n",f3);

  printf("main:%x\n",main);

}




可以通过函数的地址计算出程序的长度,也可以通过程序来计算出来,比如  f2函数的长度:修改main函数如下:

Main()

{

    long lf2=(long)f3-(long)f2;

printf("f1: %lx\n",(long)lf2);

}




 

 

函数名就像是汇编中的标记一样,是一个程序的入口地址,记录的是程序偏移地址.所以可以通过将函数名强制转换类型后可以得到偏移地址,通过运算,从而得到函数的长度.

 

当打开多个command命令窗口运行程序时,地址是相同的:




使用debug同时加载后在运行后发现地址还是一样的:



更多推荐

C语言综合研究与高强度程序设计训练 2

本文发布于:2024-02-14 03:38:43,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1761959.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:程序设计   高强度   语言

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!