也是遗留下来的问题,今天想解决掉void MyPorc()
{
printf("ok\n");
}int main()
{
int Address = (int)&MyProc;
getchar();//此处下断点
return 0;
}F5调试,运行到断点处,观察发现 MyProc 的值是 0x00fd13a0
Address的值是 0x00fd1023查看内存 0x00fd1023 此处的代码是MyProc:
00FD1023 E9 78 03 00 00 jmp MyProc (0FD13A0h)
@ILT+35(_WideCharToMultiByte@32):
00FD1028 E9 49 25 00 00 jmp WideCharToMultiByte (0FD3576h)
@ILT+40(@_RTC_AllocaHelper@12):
00FD102D E9 FE 05 00 00 jmp _RTC_AllocaHelper (0FD1630h)
_RTC_GetErrorFuncW:
00FD1032 E9 69 16 00 00 jmp _RTC_GetErrorFuncW (0FD26A0h)
@ILT+50(__RTC_NumErrors):
00FD1037 E9 94 15 00 00 jmp _RTC_NumErrors (0FD25D0h)
此处似乎是一张表?我想知道这是什么表,怎么来的 为什么获得MyProc 的地址却获得了这个地址的跳转地址
{
printf("ok\n");
}int main()
{
int Address = (int)&MyProc;
getchar();//此处下断点
return 0;
}F5调试,运行到断点处,观察发现 MyProc 的值是 0x00fd13a0
Address的值是 0x00fd1023查看内存 0x00fd1023 此处的代码是MyProc:
00FD1023 E9 78 03 00 00 jmp MyProc (0FD13A0h)
@ILT+35(_WideCharToMultiByte@32):
00FD1028 E9 49 25 00 00 jmp WideCharToMultiByte (0FD3576h)
@ILT+40(@_RTC_AllocaHelper@12):
00FD102D E9 FE 05 00 00 jmp _RTC_AllocaHelper (0FD1630h)
_RTC_GetErrorFuncW:
00FD1032 E9 69 16 00 00 jmp _RTC_GetErrorFuncW (0FD26A0h)
@ILT+50(__RTC_NumErrors):
00FD1037 E9 94 15 00 00 jmp _RTC_NumErrors (0FD25D0h)
此处似乎是一张表?我想知道这是什么表,怎么来的 为什么获得MyProc 的地址却获得了这个地址的跳转地址
解决方案 »
- MFC 如何设置窗口的大小
- 哪位好兄弟推荐一本网络编程方面的书籍
- 关于使用JRTPlib进行多播(Multicast)的问题
- 关于VC2008的ATL创建的服务方式的进程外组件的权限问题
- 一道街析曲线问题!
- ●●我的SQL语句特别长,在watch窗口中只能显示一部分。怎样才能全部显示出来?●●
- 系统菜单,系统菜单!
- 在vc中,怎样把const char *(LPCTSTR) 转换成 char*,谢谢指点
- 单文档视图怎么改ChildView的Brush啊?(记得,是文档视图)
- 32位机器上编译的dll能被64位机器上的IIS直接使用吗?
- VC++中的一段程序,帮我解释一下,谢谢
- OnLButtondown
00FD1023 E9 78 03 00 00 jmp MyProc (0FD13A0h)
@ILT+35(_WideCharToMultiByte@32):
00FD1028 E9 49 25 00 00 jmp WideCharToMultiByte (0FD3576h)
@ILT+40(@_RTC_AllocaHelper@12):
00FD102D E9 FE 05 00 00 jmp _RTC_AllocaHelper (0FD1630h)
_RTC_GetErrorFuncW:
00FD1032 E9 69 16 00 00 jmp _RTC_GetErrorFuncW (0FD26A0h)
@ILT+50(__RTC_NumErrors):
00FD1037 E9 94 15 00 00 jmp _RTC_NumErrors (0FD25D0h)
看起来应该是exe的导入表
楼主这句是取了指向MyProc的指针,不是MyProc的地址,函数名就已经代表函数的地址了,所以如果改成:int Address = (int)MyProc;那么Address与MyProc的值应该是一样的了。那个表是内存中的地址表,你Address的值是00FD1023,是指向MyProc,不是MyProc的值,当然就是跳转啦。
static void MyPorc(){}
则这个函数就不会有写在这个表里面。取消上面提到的那两项就不会再生成这个跳转表了。