毕业论文开发语言企业开发JAVA技术.NET技术WEB开发Linux/Unix数据库技术Windows平台移动平台嵌入式论文范文英语论文
您现在的位置: 毕业论文 >> windows平台 >> 正文

如何获得函数起始地址

更新时间:2012-9-18:  来源:毕业论文

目的就是获得函数起始地址 和 终止地址 。
网上资料说 可以使用函数名和下一个函数名 作为起始和终止地址。
但是 将函数名 保存到一个DWORD类型的变量后 数据发生改变 !!!!
就是 在赋值之后 变量的数据和函数名代表的地址值 不一样

如何获得一个函数的精确地址 并将其保存到 DWORD 类型的变量中 ??
编译器如何处理函数名的赋值?

即使c++中嵌入汇编
_asm
{
  mov eax , funname
  mov dwdata , eax
 }

funname 为一个函数名

dwdata 为一个DWORD 类型变量

程序当执行完第一步( mov eax , funname)时 eax寄存器的值 跟 funname 的真实函数地址 就不一样了

程序如下
#include <stdio.h>
#include <windows.h>
//目的是活的Add函数的起始地址和终止地址
int Add (int a , int b)
{
return (a+b) ;
}
void End ()
{
}

void main()
{
DWORD dwStart ;
dwStart = (DWORD)Add ;
  DWORD dwEnd ;
dwEnd = (DWORD)End ;
printf("dwStart = 0x%x\n" , dwStart);
printf("dwEnd = 0x%x\n" , dwEnd); 
/*输出结果
dwStart = 0x401005 但是调试查看得到的真实地址是 0x00401030
  dwEnd = 0x40100a 调试查看得到的真实地址是 0x00401060*/

在调试的时候可以看看地址,不过汇编比较麻烦,没有好的调试器
用函数指针都行啊。。不需要汇编这么麻烦

设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优尔论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。