Fixed a small bug where if you assemble an instruction and it is not a branch or doesn't point to memory, it would show the Non-Executable warning message
This commit is contained in:
parent
736e99ff56
commit
f163bf9368
|
|
@ -69,7 +69,7 @@ bool assembleat(duint addr, const char* instruction, int* size, char* error, boo
|
|||
*size = destSize;
|
||||
|
||||
// Check if the instruction doesn't set IP to non-executable memory
|
||||
if (!isInstructionPointingToExMemory(addr, dest))
|
||||
if (isInstructionPointingToExMemory(addr, dest) == NX_MEMORY)
|
||||
GuiDisplayWarning("Non-executable memory region", "Assembled instruction points to non-executable memory region !");
|
||||
|
||||
bool ret = MemPatch(addr, dest, destSize);
|
||||
|
|
@ -97,7 +97,7 @@ bool assembleat(duint addr, const char* instruction, int* size, char* error, boo
|
|||
return ret;
|
||||
}
|
||||
|
||||
bool isInstructionPointingToExMemory(duint addr, const unsigned char* dest)
|
||||
INSTR_POINTING_TO isInstructionPointingToExMemory(duint addr, const unsigned char* dest)
|
||||
{
|
||||
MEMMAP wMemMapStruct;
|
||||
DISASM_ARG arg;
|
||||
|
|
@ -134,7 +134,7 @@ bool isInstructionPointingToExMemory(duint addr, const unsigned char* dest)
|
|||
|
||||
// No memory pointer in the instruction, no need to go further
|
||||
if (!instrMemValuesIndex)
|
||||
return false;
|
||||
return NO_POINTER;
|
||||
|
||||
// Get memory map to locate the sections to which the instr memory address belongs to
|
||||
DbgMemMap(&wMemMapStruct);
|
||||
|
|
@ -162,15 +162,15 @@ bool isInstructionPointingToExMemory(duint addr, const unsigned char* dest)
|
|||
|
||||
// DEP is disabled if lpFlagsDep == 0
|
||||
if (GetProcessDEPPolicy(fdProcessInfo->hProcess, &lpFlagsDep, &bPermanentDep) && lpFlagsDep != 0)
|
||||
return true;
|
||||
return EX_MEMORY;
|
||||
#else
|
||||
// DEP enabled on x64
|
||||
return true;
|
||||
return EX_MEMORY;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
return NX_MEMORY;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,8 +3,15 @@
|
|||
|
||||
#include "_global.h"
|
||||
|
||||
enum INSTR_POINTING_TO
|
||||
{
|
||||
EX_MEMORY,
|
||||
NX_MEMORY,
|
||||
NO_POINTER
|
||||
};
|
||||
|
||||
bool assemble(duint addr, unsigned char* dest, int* size, const char* instruction, char* error);
|
||||
bool assembleat(duint addr, const char* instruction, int* size, char* error, bool fillnop);
|
||||
bool isInstructionPointingToExMemory(duint addr, const unsigned char* dest);
|
||||
INSTR_POINTING_TO isInstructionPointingToExMemory(duint addr, const unsigned char* dest);
|
||||
|
||||
#endif // _ASSEMBLE_H
|
||||
|
|
|
|||
Loading…
Reference in New Issue