汇编转VC,希望能帮忙。解决办法
汇编转VC,希望能帮忙。
希望大侠能帮忙转换下。不懂汇编。
------解决方案--------------------
汇编看着着实头大,帮你顶一下!
------解决方案--------------------
分析一下代码,理解了函数负责的工作,可以直接自己实现了。
------解决方案--------------------
去汇编板块问问吧!看看实现的啥功能,然后再用vc来实现相同功能就成!
------解决方案--------------------
为了通过编译,作了一些修改,仅供理解汇编:
#include "stdafx.h"
#include "create_index.h"
void InitializeIndexDesc(void* pEntry,DWORD dwNum);
CIndexCreator::CIndexCreator()
{
memset(this,0,sizeof(CIndexCreator));
}
BOOL CIndexCreator::Initialize(DWORD dwMaxNum)
{
m_dwMaxIndexNum = dwMaxNum;
m_pIndexList = new INDEX_DESC[m_dwMaxIndexNum];
InitializeIndexDesc(m_pIndexList,m_dwMaxIndexNum);
m_pBaseDesc = m_pIndexList;
m_ppIndexDescTable = new INDEX_DESC*[m_dwMaxIndexNum];
memset(m_ppIndexDescTable,0,sizeof(INDEX_DESC*)*m_dwMaxIndexNum);
m_dwMaxIndexNum--;
return TRUE;
}
DWORD __declspec(naked) NewICAllocIndex(CIndexCreator* pIC)
{
__asm
{
enter 0,0
push esi
push edi
push ebx
push edx
xor eax,eax
mov ebx,dword ptr[pIC]
mov esi,dword ptr[ebx+4] ; m_pBaseDesc
or esi,esi
jz lb_return
mov edx,dword ptr[esi] ; result dwIndex
mov edi,dword ptr[ebx+8] ; m_ppIndexDescTable
mov eax,dword ptr[esi+4] ; pDesc->m_pNext
mov dword ptr[ebx+4],eax ; m_pBaseDesc = pDesc->m_pNext
mov eax,edx ; backup result
shl edx,2 ; * 4
add edi,edx
mov dword ptr[edi],esi ; m_ppIndexDescTable[dwIndex] = pDesc(result)
inc dword ptr[ebx+12]
lb_return:
pop edx
pop ebx
pop edi
pop esi
leave
ret
}
}
void __declspec(naked) NewICFreeIndex(CIndexCreator* pIC,DWORD dwIndex)
{
__asm
{
enter 0,0
push esi
push edi
push ebx
push edx
push eax
xor edx,edx
mov ebx,dword ptr[pIC]
mov eax,dword ptr[dwIndex]
mov edi,dword ptr[ebx+8] ; m_ppIndexDescTable
shl eax,2
add edi,eax
mov esi,dword ptr[edi] ; pDesc
or esi,esi
jz lb_return
mov dword ptr[edi],edx ; m_ppIndexDescTable[dwIndex] = NULL
mov edi,dword ptr[ebx+4] ; m_pBaseDesc
mov dword ptr[esi+4],edi ; pDesc->m_pNext = m_pBaseDesc
mov dword ptr[ebx+4],esi ; m_pBaseDesc = pDesc
dec dword ptr[ebx+12]
lb_return:
pop eax
pop edx
pop ebx
pop edi
pop esi
leave
ret
}
}
CIndexCreator::~CIndexCreator()
{
if (m_pIndexList)
{
delete [] m_pIndexList;
m_pIndexList = NULL;
}
if (m_ppIndexDescTable)
{
delete [] m_ppIndexDescTable;
m_ppIndexDescTable = NULL;
}
}
void __declspec(naked) InitializeIndexDesc(void* pEntry,DWORD dwNum)
{
__asm
{
enter 0,0
push esi
push edi
push eax
push edx
push ecx
xor eax,eax
xor edx,edx
inc eax
mov edi,dword ptr[pEntry]
mov ecx,dword ptr[dwNum]
mov esi,edi
add edi,INDEX_DESC_SIZE
dec ecx
lb_loop:
mov dword ptr[edi-8],eax
mov dword ptr[edi-4],edi
inc eax
add edi,INDEX_DESC_SIZE
loop lb_loop
mov dword ptr[edi-4],edx
mov dword ptr[edi-8],eax
pop ecx
pop edx
pop eax
pop edi
pop esi
leave
ret
}
}
希望大侠能帮忙转换下。不懂汇编。
------解决方案--------------------
汇编看着着实头大,帮你顶一下!
------解决方案--------------------
分析一下代码,理解了函数负责的工作,可以直接自己实现了。
------解决方案--------------------
去汇编板块问问吧!看看实现的啥功能,然后再用vc来实现相同功能就成!
------解决方案--------------------
为了通过编译,作了一些修改,仅供理解汇编:
#include <Windows.h>
//#include "create_index.h"
struct INDEX_DESC
{
DWORD m_dwIndex;
INDEX_DESC* m_pNext;
};
#define INDEX_DESC_SIZE 8
class CIndexCreator
{
public: /*加*/
INDEX_DESC* m_pIndexList;
INDEX_DESC* m_pBaseDesc;
INDEX_DESC** m_ppIndexDescTable;
DWORD m_dwIndexNum;
DWORD m_dwMaxIndexNum;
public:
BOOL Initialize(DWORD dwMaxNum);
DWORD GetIndexNum() {return m_dwIndexNum;}