能力值:
( LV2,RANK:10 )
|
-
-
2 楼
我想你的看看你的opcode可能就是空指令
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
opcode是什么东东?
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
我把代码帖出来,是一个子过程的相信大家都看过吧
;Base是DLL的基址,sApi为相应的API函数的函数名地址,返回eax指向API函数地址
GetApiA proc Base:DWORD,sApi:DWORD
local ADDRofFun:DWORD
pushad ;把所有寄存器压入堆栈
mov esi,Base
mov eax,esi
mov ebx,eax
mov ecx,eax
mov edx,eax
mov edi,eax ;几个寄存器全部置为DLL基址
add ecx,[ecx+3ch] ;现在esi=off PE_HEADER ecx指向pe header
;mov edx,dword ptr [ecx]
;invoke RtlZeroMemory,addr szBuffer,sizeof szBuffer
;invoke wsprintf,addr szBuffer,addr szFormat,ecx
;invoke MessageBox,0,addr szBuffer,0,0
add esi,[ecx+78h] ;78h=4h+14h+60h;得到esi=IMAGE_EXPORT_DIRECTORY引出表入口
add eax,[esi+1ch] ;eax=AddressOfFunctions的地址 指向导出函数地址表的RVA
mov ADDRofFun,eax
mov ecx,[esi+18h] ;ecx=NumberOfNames 以名称导出的函数的总数
add edx,[esi+24h] ;edx=AddressOfNameOrdinals,指向函数对应序列号数组
add edi,[esi+20h] ;esi=AddressOfNames 指向函数名地址表的RVA
invoke K32_api_retrieve,Base,sApi ;调用另外一个过程,得到一个API函数序号
mov ebx,ADDRofFun
mov eax,[ebx+eax*4] ;要*4才得到偏移
add eax,Base ;得到的是RVA地址!加上Base!
mov [esp+7*4],eax ;eax返回api地址
popad
ret
GetApiA endp
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
我知道怎么错了。。
谢谢大家。
|