当函数“dbmSetIndex”返回时,我的程序被终止。 你可以看到下面的死亡位置。 (=>部分) 你能解释发生了什么吗? (86英特尔)程序在函数返回后死亡
0x0000000000420723 <+83>: mov rdi,r14
0x0000000000420726 <+86>: call 0x405260 <[email protected]>
0x000000000042072b <+91>: test eax,eax
0x000000000042072d <+93>: mov ebp,eax
=> 0x000000000042072f <+95>: mov DWORD PTR [r12],eax
0x0000000000420733 <+99>: jne 0x4207d0 <FnDBBase::SelectSecurity(s_oms_security*, char*)+256>
0x0000000000420739 <+105>: lea rsi,[rip+0x4197d] # 0x4620bd
这里是dbmSetIndex代码。 我无法找到此代码的哪部分导致此问题。
int dbmSetIndex (dbmHandle* aHandle, const char* aTable, const char* aIndexName)
{
dbmInternalHandle* pHandle = NULL;
_TRY
{
pHandle = (dbmInternalHandle*)aHandle->mHandle;
// Water Mark가 다르면 걍 리턴해라.
if (unlikely (aHandle->mMark != DBM_HANDLE_MARK))
{
DBM_ERR ("invalide magic number (%ld)", aHandle->mMark);
_THROW(ERR_DBM_INVALID_HANDLE);
}
if(pHandle->mRemote != NULL)
{
if(pHandle->mRemote->mSockFd > 0)
{
_CALL(dbmRemoteSetIndex(aHandle, aTable, aIndexName));
_RETURN;
}
}
/****************************************
* DataObject 맵핑.
****************************************/
memset_s(&pHandle->mData, 0x00, sizeof(pHandle->mData));
memcpy_s (pHandle->mData.mTableName, aTable, strlen_s (aTable) + 1);
pHandle->mData.mTransType = DBM_SET_INDEX;
pHandle->mData.mUserData = (char*)aIndexName;
/****************************************
* mAct 호출.
****************************************/
_CALL(pHandle->mTrans->mAct (pHandle));
}
_CATCH
{
_CATCH_ERR;
}
_FINALLY
_END
}
请用标记语言编程。 – JJJ