首页
社区
课程
招聘
刚学汇编碰到的问题
发表于: 2004-5-16 17:41 5294

刚学汇编碰到的问题

2004-5-16 17:41
5294
mov   esi,Base   ;执行以后esi=Base
        mov   eax,esi    ;eax=0   这里怎么没有执行成功呢
        mov   ebx,eax    ;eax=0
        mov   ecx,eax    ;eax=0
        mov   edx,eax    ;eax=0
        mov   edi,eax    ;eax=0

[注意]APP应用上架合规检测服务,协助应用顺利上架!

收藏
免费 6
支持
分享
最新回复 (4)
雪    币: 207
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
我想你的看看你的opcode可能就是空指令
2004-5-16 18:27
0
雪    币: 251
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
opcode是什么东东?
2004-5-17 10:21
0
雪    币: 251
活跃值: (160)
能力值: ( 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
2004-5-17 10:23
0
雪    币: 251
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我知道怎么错了。。
谢谢大家。
2004-5-17 10:42
0
游客
登录 | 注册 方可回帖
返回
// // 统计代码