1
0
Fork 0

DBG: added Script::Stack (you also need to recompile Script::Register to use it correctly) + added Script::Gui::Refresh()

This commit is contained in:
Mr. eXoDia 2015-07-07 16:51:08 +02:00
parent fad9bc1fb7
commit c6e6ff4b3e
8 changed files with 105 additions and 17 deletions

View File

@ -129,4 +129,9 @@ SCRIPT_EXPORT bool Script::Gui::InputValue(const char* title, duint* value)
if(!GuiGetLineWindow(title, line()))
return false;
return Misc::ParseExpression(line(), value);
}
SCRIPT_EXPORT void Script::Gui::Refresh()
{
GuiUpdateAllViews();
}

View File

@ -49,6 +49,7 @@ SCRIPT_EXPORT void Message(const char* message);
SCRIPT_EXPORT bool MessageYesNo(const char* message);
SCRIPT_EXPORT bool InputLine(const char* title, char* text); //text[GUI_MAX_LINE_SIZE]
SCRIPT_EXPORT bool InputValue(const char* title, duint* value);
SCRIPT_EXPORT void Refresh();
}; //Gui
}; //Script

View File

@ -9,6 +9,7 @@ static const char* regTable[] =
"DR3",
"DR6",
"DR7",
"EAX",
"AX",
"AH",
@ -34,7 +35,7 @@ static const char* regTable[] =
"ESP",
"SP",
"EIP",
"CIP",
#ifdef _WIN64
"RAX",
"RBX",
@ -80,7 +81,15 @@ static const char* regTable[] =
"R15",
"R15D",
"R15W",
"R15"
"R15",
#endif //_WIN64
#ifdef _WIN64
"RIP",
"RSP"
#else //x32
"EIP",
"ESP"
#endif //_WIN64
};
@ -96,6 +105,11 @@ SCRIPT_EXPORT bool Script::Register::Set(Script::Register::RegisterEnum reg, dui
return setregister(regTable[reg], value);
}
SCRIPT_EXPORT int Script::Register::Size()
{
return (int)sizeof(duint);
}
SCRIPT_EXPORT duint Script::Register::GetDR0()
{
return Get(DR0);
@ -406,16 +420,6 @@ SCRIPT_EXPORT bool Script::Register::SetEIP(unsigned int value)
return Set(EIP, value);
}
SCRIPT_EXPORT duint Script::Register::GetCIP()
{
return Get(CIP);
}
SCRIPT_EXPORT bool Script::Register::SetCIP(duint value)
{
return Set(CIP, value);
}
#ifdef _WIN64
SCRIPT_EXPORT unsigned long long Script::Register::GetRAX()
{
@ -866,4 +870,24 @@ SCRIPT_EXPORT bool Script::Register::SetR15B(unsigned char value)
{
return Set(R15B, value);
}
#endif //_WIN64
#endif //_WIN64
SCRIPT_EXPORT duint Script::Register::GetCIP()
{
return Get(CIP);
}
SCRIPT_EXPORT bool Script::Register::SetCIP(duint value)
{
return Set(CIP, value);
}
SCRIPT_EXPORT duint Script::Register::GetCSP()
{
return Get(CSP);
}
SCRIPT_EXPORT bool Script::Register::SetCSP(duint value)
{
return Set(CSP, value);
}

View File

@ -15,6 +15,7 @@ enum RegisterEnum
DR3,
DR6,
DR7,
EAX,
AX,
AH,
@ -40,7 +41,7 @@ enum RegisterEnum
ESP,
SP,
EIP,
CIP,
#ifdef _WIN64
RAX,
RBX,
@ -86,12 +87,16 @@ enum RegisterEnum
R15,
R15D,
R15W,
R15B
R15B,
#endif //_WIN64
CIP,
CSP,
}; //RegisterEnum
SCRIPT_EXPORT duint Get(RegisterEnum reg);
SCRIPT_EXPORT bool Set(RegisterEnum reg, duint value);
SCRIPT_EXPORT int Size(); //gets architecture register size in bytes
SCRIPT_EXPORT duint GetDR0();
SCRIPT_EXPORT bool SetDR0(duint value);
@ -105,6 +110,7 @@ SCRIPT_EXPORT duint GetDR6();
SCRIPT_EXPORT bool SetDR6(duint value);
SCRIPT_EXPORT duint GetDR7();
SCRIPT_EXPORT bool SetDR7(duint value);
SCRIPT_EXPORT unsigned int GetEAX();
SCRIPT_EXPORT bool SetEAX(unsigned int value);
SCRIPT_EXPORT unsigned short GetAX();
@ -155,8 +161,7 @@ SCRIPT_EXPORT unsigned short GetSP();
SCRIPT_EXPORT bool SetSP(unsigned short value);
SCRIPT_EXPORT unsigned int GetEIP();
SCRIPT_EXPORT bool SetEIP(unsigned int value);
SCRIPT_EXPORT duint GetCIP();
SCRIPT_EXPORT bool SetCIP(duint value);
#ifdef _WIN64
SCRIPT_EXPORT unsigned long long GetRAX();
SCRIPT_EXPORT bool SetRAX(unsigned long long value);
@ -249,6 +254,11 @@ SCRIPT_EXPORT bool SetR15W(unsigned short value);
SCRIPT_EXPORT unsigned char GetR15B();
SCRIPT_EXPORT bool SetR15B(unsigned char value);
#endif //_WIN64
SCRIPT_EXPORT duint GetCIP();
SCRIPT_EXPORT bool SetCIP(duint value);
SCRIPT_EXPORT duint GetCSP();
SCRIPT_EXPORT bool SetCSP(duint value);
}; //Register
}; //Script

View File

@ -0,0 +1,24 @@
#include "_scriptapi_stack.h"
#include "_scriptapi_memory.h"
#include "_scriptapi_register.h"
SCRIPT_EXPORT duint Script::Stack::Pop()
{
duint csp = Register::GetCSP();
duint top = Memory::ReadPtr(csp);
Register::SetCSP(csp + sizeof(duint));
return top;
}
SCRIPT_EXPORT duint Script::Stack::Push(duint value)
{
duint csp = Register::GetCSP();
Register::SetCSP(csp - sizeof(duint));
Memory::WritePtr(csp, value);
return Memory::ReadPtr(csp);
}
SCRIPT_EXPORT duint Script::Stack::Peek(int offset)
{
return Memory::ReadPtr(Register::GetCSP() + offset * sizeof(duint));
}

View File

@ -0,0 +1,16 @@
#ifndef _SCRIPTAPI_STACK_H
#define _SCRIPTAPI_STACK_H
#include "_scriptapi.h"
namespace Script
{
namespace Stack
{
SCRIPT_EXPORT duint Pop();
SCRIPT_EXPORT duint Push(duint value); //returns the previous top, equal to Peek(1)
SCRIPT_EXPORT duint Peek(int offset = 0); //offset is in multiples of Register::Size(), for easy x32/x64 portability
}; //Stack
}; //Script
#endif //_SCRIPTAPI_STACK_H

View File

@ -75,6 +75,7 @@
<ClCompile Include="_scriptapi_memory.cpp" />
<ClCompile Include="_scriptapi_module.cpp" />
<ClCompile Include="_scriptapi_register.cpp" />
<ClCompile Include="_scriptapi_stack.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="addrinfo.h" />
@ -187,6 +188,7 @@
<ClInclude Include="_scriptapi_memory.h" />
<ClInclude Include="_scriptapi_module.h" />
<ClInclude Include="_scriptapi_register.h" />
<ClInclude Include="_scriptapi_stack.h" />
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{E6548308-401E-3A8A-5819-905DB90522A6}</ProjectGuid>

View File

@ -255,6 +255,9 @@
<ClCompile Include="_scriptapi_misc.cpp">
<Filter>Source Files\Interfaces/Exports\_scriptapi</Filter>
</ClCompile>
<ClCompile Include="_scriptapi_stack.cpp">
<Filter>Source Files\Interfaces/Exports\_scriptapi</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="x64_dbg.h">
@ -587,5 +590,8 @@
<ClInclude Include="_scriptapi_misc.h">
<Filter>Header Files\Interfaces/Exports\_scriptapi</Filter>
</ClInclude>
<ClInclude Include="_scriptapi_stack.h">
<Filter>Header Files\Interfaces/Exports\_scriptapi</Filter>
</ClInclude>
</ItemGroup>
</Project>