获取GetProcAddress函数地址遇到的的有关问题

获取GetProcAddress函数地址遇到的的问题
汇编代码如下:
#include <windows.h>
#include <winbase.h>
void main()
{
_asm
{
mov eax,fs:0x30; PEB的地址
mov eax,[eax+0x0c]; Ldr的地址
mov esi,[eax+0x1c]; Flink的地址
lodsd
mov eax,[eax+0x08]; Kernel32.dll的地址
mov ebp,eax; Kernel32基址
mov eax,[ebp+3ch]; eax=PE头部
mov edx,[ebp+eax+78h]; 引出表偏移
add edx,ebp; edx=引出表的地址
  mov ecx,[edx+18h]; ecx=输出函数的个数

mov ebx,[edx+20h];
add ebx,ebp; ebx=函数名地址,AddressOfName
search:
dec ecx;
mov esi,[ebx+ecx*4]
add esi,ebp; 依次找每个函数名称,GetProcAddress
mov eax,0x50746547; 'PteG'
cmp [esi],eax;
jne search; 
mov eax,0x41636f72; 'Acor'
cmp [esi+4],eax;
jne search; 如果是GetProcA,表示在AddressOfName中找到了

mov ebx,[edx+24h]; 函数序号数组偏移地址
add ebx,ebp; 
  mov cx,[ebx+ecx*2]; ecx=计算出的序号值
mov ebx,[edx+1ch]  
add ebx,ebp; ebx=函数地址的起始位置
mov eax,[ebx+ecx*4]
add eax,ebp; 利用序号值,得到GetProcAddress的地址
}
}
/***************************************************************************************/
为什么计算序号值的时候是mov cx,[ebx+ecx*2],我的理解应该是mov ecx,[ebx+ecx*4],函数序号数组不是有4字节吗,还有就是为什么是用cx,用ecx得出结果是错误的,求大虾指点~


------解决方案--------------------
函数序号在存储上,用的是 WORD 而非 DWORD 吧;直接用 HIEW 类软件打开个 DLL,定位到 Export 节看其序号的排列就很明了的。