上例中便是调用GetSystemMenu函数的




有如下问题请教各位:

1.  为什么程序在调用window api或者dll中的输出函数时用的形式是
:00401375 FF1514324000            Call dword ptr [00403214]

上例中便是调用GetSystemMenu函数的.
我感到疑惑的是难道这个函数的入口地址每次在window启动时都放在内存00403214处吗?且我反编译后没有403214这个地方。

2.  静态反编译软件如w32dasm是如何根据这个地址知道了函数名字的?如下
* Reference To: USER32.GetSystemMenu, Ord:0145h
                                  |
:00401375 FF1514324000            Call dword ptr [00403214]
:0040137B 50                      push eax

3.  是不是Call dword ptr [XXXXXXXX] 只能用于系统的dll中的导出函数?

谢谢! 
 
回复时引用此帖 返回顶端

普通会员
普通会员

资 料:
注册日期: Jul 2004
帖子:  99  rockhard 品行端正
精华:  4
现金: 205 Kx
致谢数: 0
获感谢文章数:0
获会员感谢数:0
2  旧 2005-10-19, 09:36:11  默认
rockhard 当前离线

自己想明白了, 

call dword prt [XXXXXXXX]

此处的XXXXXXXX就是FirstThunk (IMAGE_IMPORT_DESCRIPTOR 结构中的一个成员) 指向的IMAGE_THUNK_DATA 数组中的某个元素的值。此值在程序装入内存时由装载器将它替换成实际函数的地址。 

有如下问题请教各位:

1.  为什么程序在调用window api或者dll中的输出函数时用的形式是
:00401375 FF1514324000            Call dword ptr [00403214]

上例中便是调用GetSystemMenu函数的.
我感到疑惑的是难道这个函数的入口地址每次在window启动时都放在内存00403214处吗?且我反编译后没有403214这个地方。

2.  静态反编译软件如w32dasm是如何根据这个地址知道了函数名字的?如下
* Reference To: USER32.GetSystemMenu, Ord:0145h
                                  |
:00401375 FF1514324000            Call dword ptr [00403214]
:0040137B 50                      push eax

3.  是不是Call dword ptr [XXXXXXXX] 只能用于系统的dll中的导出函数?

谢谢! 
 
回复时引用此帖 返回顶端

普通会员
普通会员

资 料:
注册日期: Jul 2004
帖子:  99  rockhard 品行端正
精华:  4
现金: 205 Kx
致谢数: 0
获感谢文章数:0
获会员感谢数:0
2  旧 2005-10-19, 09:36:11  默认
rockhard 当前离线

自己想明白了, 

call dword prt [XXXXXXXX]

此处的XXXXXXXX就是FirstThunk (IMAGE_IMPORT_DESCRIPTOR 结构中的一个成员) 指向的IMAGE_THUNK_DATA 数组中的某个元素的值。此值在程序装入内存时由装载器将它替换成实际函数的地址。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值