内嵌汇编报Operand size mismatch

quicksand201 2015-10-13 04:06:49
代码是别人用delphi5写的,想用delphi7编译后在win7下运行
下面标红的代码编译时报Operand size mismatch
不懂汇编,请懂的大大帮看下怎么改啊,先谢了
-------------------------------------------------------------------------------------------
type
TExportEntry = packed record
nParamCount: DWORD;
Hook_Handler: Pointer;
Stub: TFunctionEntryPoint;
FunctionName: PChar;
LibraryName: PChar;
end;

entries: array [0..1] of TExportEntry = (
(nParamCount: 3; Hook_Handler: @HookExport_GetProcAddress; FunctionName: 'GetProcAddress'; LibraryName: 'kernel32.dll'),
(nParamCount: 4; Hook_Handler: @HookExport_LoadLibraryExW; FunctionName: 'LoadLibraryExW'; LibraryName: 'kernel32.dll')
);

procedure Hook_Multiplexer(); stdcall; assembler;
asm
pop eax // function index

push ebp // save stack frame
mov ebp, esp //

push ebx // Save all used registers and flags
push ecx
push edx
push esi
push edi
pushfd

mov ebx, eax

mov eax, sizeof(TExportEntry) // get entries item
mov edx, ebx //
mul edx // eax = entries + index * sizeof(one item)
lea ecx, dword ptr entries // get ptr to entries array
add ecx, eax
xchg eax, ecx
mov ecx, [eax + nParamCountOffs] // ecx = entries[index].nParamCount
mov edx, [eax + HookHandlerOffs] // get entries[index].handler

push eax

@@next:
mov eax, [ebp + ecx * 4 ] // Push all parameters
push eax
dec ecx
jnz @@next // loop until ecx == 0 (with zero included)

call edx // call it
pop ecx
cmp eax, -2
jne @@_exit_1 // if handler returns good value, just leave

mov eax, ecx

lea ecx, [EAX + StubOffs] // get entries[index].stub

mov eax, ecx

popfd
pop edi
pop esi
pop edx
pop ecx
pop ebx
mov esp, ebp
pop ebp
jmp eax // jump to stub

@@_exit_1:
mov edx, [ecx]
cmp edx, 4
je @@_ret12
jmp @@_ret8

@@_ret8:
popfd
pop edi
pop esi
pop edx // Restore registers
pop ecx
pop ebx
mov esp, ebp
pop ebp
ret 8

@@_ret12:
popfd
pop edi
pop esi
pop edx // Restore registers
pop ecx
pop ebx
mov esp, ebp
pop ebp
ret 12
end;
...全文
595 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
doloopcn 2015-10-14
  • 打赏
  • 举报
回复
mov eax, sizeof(TExportEntry)
改成:
mov eax,sizeof(entries[0]);
试一试
pathletboy 2015-10-13
  • 打赏
  • 举报
回复
改成这样
mov    eax, type TExportEntry

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧