函数名代表的内存地址转换成DWORD

mdzwmyy 2014-02-10 05:15:41
#include <iostream>
#include <windows.h>

void fuc(int a)
{
std::cout<<a<<"\n";
}

int main()
{
DWORD Fuc=(DWORD)fuc;//我想得到的是内存中函数fuc的首地址,但是强制转换后就不对了
std::cout<<Fuc<<"\n";
return 0;
}
...全文
114 点赞 收藏 6
写回复
6 条回复
mdzwmyy 2014年02月10日
引用 5 楼 ADF1230 的回复:
[quote=引用 4 楼 mdzwmyy 的回复:] [quote=引用 3 楼 ADF1230 的回复:] [quote=引用 2 楼 mdzwmyy 的回复:] [quote=引用 1 楼 ADF1230 的回复:] 参考这篇文章: http://www.cnblogs.com/xylc/p/3503612.html
谢谢你!那么我想得到这个函数的地址比如:0x00401100 怎么把这个数值存放到Fuc这个DWORD变量中呢,新手不懂,求教额~[/quote] 直接强转啊,release模式是正常的。 debug模式下,在地址0x00401100处应该有一条跳转指令:jmp xxxx 你解析一下这个jmp指令就知道真实地址了。(PS:visual studio 是这样,其他编译器不保证)。 注意X64平台下指针可能被截断。[/quote] 用release模式编译了,然后用OD调试了 不是正确的值 我是用的VC6.0[/quote]
#include <stdio.h>
#include <windows.h>

void test_func()
{
	printf("hello world\n");
}

int main()
{
	DWORD dwFuc = (DWORD)test_func;//我想得到的是内存中函数fuc的首地址,但是强制转换后就不对了

	_asm{
		call dwFuc
	}
	BYTE* pAddress = (BYTE*)test_func;
	printf("0x%x ", *pAddress++);
	printf("0x%x ", *pAddress++);
	printf("0x%x ", *pAddress++);
	printf("0x%x \n", *pAddress++);
	return 0;
}
vs2013编译,结果: debug: hello world 0xe9 0x3e 0x3 0x0 release: hello world 0x68 0x0 0x21 0x93 0xe9是跳转指令,这个结果是对的啊。[/quote] 嗯嗯 原来我代码没错 太谢谢你了
回复 点赞
神-气 2014年02月10日
引用 4 楼 mdzwmyy 的回复:
[quote=引用 3 楼 ADF1230 的回复:] [quote=引用 2 楼 mdzwmyy 的回复:] [quote=引用 1 楼 ADF1230 的回复:] 参考这篇文章: http://www.cnblogs.com/xylc/p/3503612.html
谢谢你!那么我想得到这个函数的地址比如:0x00401100 怎么把这个数值存放到Fuc这个DWORD变量中呢,新手不懂,求教额~[/quote] 直接强转啊,release模式是正常的。 debug模式下,在地址0x00401100处应该有一条跳转指令:jmp xxxx 你解析一下这个jmp指令就知道真实地址了。(PS:visual studio 是这样,其他编译器不保证)。 注意X64平台下指针可能被截断。[/quote] 用release模式编译了,然后用OD调试了 不是正确的值 我是用的VC6.0[/quote]
#include <stdio.h>
#include <windows.h>

void test_func()
{
	printf("hello world\n");
}

int main()
{
	DWORD dwFuc = (DWORD)test_func;//我想得到的是内存中函数fuc的首地址,但是强制转换后就不对了

	_asm{
		call dwFuc
	}
	BYTE* pAddress = (BYTE*)test_func;
	printf("0x%x ", *pAddress++);
	printf("0x%x ", *pAddress++);
	printf("0x%x ", *pAddress++);
	printf("0x%x \n", *pAddress++);
	return 0;
}
vs2013编译,结果: debug: hello world 0xe9 0x3e 0x3 0x0 release: hello world 0x68 0x0 0x21 0x93 0xe9是跳转指令,这个结果是对的啊。
回复 点赞
mdzwmyy 2014年02月10日
引用 3 楼 ADF1230 的回复:
[quote=引用 2 楼 mdzwmyy 的回复:] [quote=引用 1 楼 ADF1230 的回复:] 参考这篇文章: http://www.cnblogs.com/xylc/p/3503612.html
谢谢你!那么我想得到这个函数的地址比如:0x00401100 怎么把这个数值存放到Fuc这个DWORD变量中呢,新手不懂,求教额~[/quote] 直接强转啊,release模式是正常的。 debug模式下,在地址0x00401100处应该有一条跳转指令:jmp xxxx 你解析一下这个jmp指令就知道真实地址了。(PS:visual studio 是这样,其他编译器不保证)。 注意X64平台下指针可能被截断。[/quote] 用release模式编译了,然后用OD调试了 不是正确的值 我是用的VC6.0
回复 点赞
神-气 2014年02月10日
引用 2 楼 mdzwmyy 的回复:
[quote=引用 1 楼 ADF1230 的回复:] 参考这篇文章: http://www.cnblogs.com/xylc/p/3503612.html
谢谢你!那么我想得到这个函数的地址比如:0x00401100 怎么把这个数值存放到Fuc这个DWORD变量中呢,新手不懂,求教额~[/quote] 直接强转啊,release模式是正常的。 debug模式下,在地址0x00401100处应该有一条跳转指令:jmp xxxx 你解析一下这个jmp指令就知道真实地址了。(PS:visual studio 是这样,其他编译器不保证)。 注意X64平台下指针可能被截断。
回复 点赞
mdzwmyy 2014年02月10日
引用 1 楼 ADF1230 的回复:
参考这篇文章: http://www.cnblogs.com/xylc/p/3503612.html
谢谢你!那么我想得到这个函数的地址比如:0x00401100 怎么把这个数值存放到Fuc这个DWORD变量中呢,新手不懂,求教额~
回复 点赞
神-气 2014年02月10日
回复 点赞
发动态
发帖子
VC/MFC
创建于2007-09-28

7889

社区成员

42.1w+

社区内容

VC/MFC相关问题讨论
社区公告
暂无公告