Skip to content

Commit

Permalink
Merge pull request #244 from eunchong/master
Browse files Browse the repository at this point in the history
Add method startAnalysisFromEntry()
  • Loading branch information
JonathanSalwan committed Jan 10, 2016
2 parents 68977ce + 410242c commit 2f26f69
Show file tree
Hide file tree
Showing 10 changed files with 44 additions and 7 deletions.
5 changes: 4 additions & 1 deletion examples/callback_after.py
Expand Up @@ -160,7 +160,10 @@ def my_callback_after(instruction):
if __name__ == '__main__':

# Start the symbolic analysis from the 'main' function
startAnalysisFromSymbol('main')
# startAnalysisFromSymbol('main')

# Start the symbolic analysis from the Entry point
startAnalysisFromEntry()

# Add a callback.
addCallback(my_callback_after, IDREF.CALLBACK.AFTER)
Expand Down
5 changes: 4 additions & 1 deletion examples/callback_before.py
Expand Up @@ -39,7 +39,10 @@ def my_callback_before(instruction):

if __name__ == '__main__':
# Start the symbolic analysis from the 'main' function
startAnalysisFromSymbol('main')
# startAnalysisFromSymbol('main')

# Start the symbolic analysis from the Entry point
startAnalysisFromEntry()

# Add a callback.
addCallback(my_callback_before, IDREF.CALLBACK.BEFORE)
Expand Down
5 changes: 4 additions & 1 deletion examples/callback_image.py
Expand Up @@ -28,7 +28,10 @@ def image(imagePath, imageBase, imageSize):
if __name__ == '__main__':

# Start the symbolic analysis from the 'main' function
startAnalysisFromSymbol('main')
# startAnalysisFromSymbol('main')

# Start the symbolic analysis from the Entry point
startAnalysisFromEntry()

# Add a callback.
addCallback(image, IDREF.CALLBACK.IMAGE_LOAD)
Expand Down
5 changes: 4 additions & 1 deletion examples/callback_routine.py
Expand Up @@ -25,7 +25,10 @@ def mallocExit(threadId):
if __name__ == '__main__':

# Start the symbolic analysis from the 'main' function
startAnalysisFromSymbol('main')
# startAnalysisFromSymbol('main')

# Start the symbolic analysis from the Entry point
startAnalysisFromEntry()

# Add a callback.
addCallback(mallocEntry, IDREF.CALLBACK.ROUTINE_ENTRY, "malloc")
Expand Down
5 changes: 4 additions & 1 deletion examples/callback_signals.py
Expand Up @@ -65,7 +65,10 @@ def signals(threadId, sig):
if __name__ == '__main__':

# Start the symbolic analysis from the 'main' function
startAnalysisFromSymbol('main')
# startAnalysisFromSymbol('main')

# Start the symbolic analysis from the Entry point
startAnalysisFromEntry()

# Add a callback.
addCallback(signals, IDREF.CALLBACK.SIGNALS)
Expand Down
5 changes: 4 additions & 1 deletion examples/callback_syscall.py
Expand Up @@ -31,7 +31,10 @@ def my_callback_syscall_exit(threadId, std):
if __name__ == '__main__':

# Start the symbolic analysis from the 'main' function
startAnalysisFromSymbol('main')
# startAnalysisFromSymbol('main')

# Start the symbolic analysis from the Entry point
startAnalysisFromEntry()

addCallback(my_callback_syscall_entry, IDREF.CALLBACK.SYSCALL_ENTRY)
addCallback(my_callback_syscall_exit, IDREF.CALLBACK.SYSCALL_EXIT)
Expand Down
3 changes: 2 additions & 1 deletion examples/get_stats.py
Expand Up @@ -20,7 +20,8 @@ def fini():
if __name__ == '__main__':

# Start the symbolic analysis from the 'main' function
startAnalysisFromSymbol('main')
# startAnalysisFromSymbol('main')
startAnalysisFromEntry()

# Dump stats at the end of the execution
addCallback(fini, IDREF.CALLBACK.FINI)
Expand Down
11 changes: 11 additions & 0 deletions src/bindings/python/modules/tritonCallbacks.cpp
Expand Up @@ -32,6 +32,7 @@ extern Trigger analysisTrigger;
namespace PyTritonOptions {
/* Execution configurations */
char *startAnalysisFromSymbol = nullptr;
char startAnalysisFromEntry = false;
std::set<__uint> startAnalysisFromAddr;
std::set<__uint> startAnalysisFromOffset;
std::set<__uint> stopAnalysisFromAddr;
Expand Down Expand Up @@ -480,6 +481,15 @@ static PyObject *Triton_startAnalysisFromSymbol(PyObject *self, PyObject *name)
}


static char Triton_startAnalysisFromEntry_doc[] = "Starts the symbolic execution from a Entry point";
static PyObject *Triton_startAnalysisFromEntry(PyObject *self, PyObject *noarg) {

PyTritonOptions::startAnalysisFromEntry = true;
Py_INCREF(Py_None);
return Py_None;
}


static char Triton_startAnalysisFromAddr_doc[] = "Starts the symbolic execution from a specific address";
static PyObject *Triton_startAnalysisFromAddr(PyObject *self, PyObject *addr) {
if (!PyLong_Check(addr) && !PyInt_Check(addr))
Expand Down Expand Up @@ -1352,6 +1362,7 @@ PyMethodDef tritonCallbacks[] = {
{"startAnalysisFromAddr", Triton_startAnalysisFromAddr, METH_O, Triton_startAnalysisFromAddr_doc},
{"startAnalysisFromOffset", Triton_startAnalysisFromOffset, METH_O, Triton_startAnalysisFromOffset_doc},
{"startAnalysisFromSymbol", Triton_startAnalysisFromSymbol, METH_O, Triton_startAnalysisFromSymbol_doc},
{"startAnalysisFromEntry", Triton_startAnalysisFromEntry, METH_NOARGS, Triton_startAnalysisFromEntry_doc},
{"stopAnalysisFromAddr", Triton_stopAnalysisFromAddr, METH_O, Triton_stopAnalysisFromAddr_doc},
{"stopAnalysisFromOffset", Triton_stopAnalysisFromOffset, METH_O, Triton_stopAnalysisFromOffset_doc},
{"syscallToString", Triton_syscallToString, METH_VARARGS, Triton_syscallToString_doc},
Expand Down
1 change: 1 addition & 0 deletions src/includes/PythonBindings.h
Expand Up @@ -29,6 +29,7 @@ namespace PyTritonOptions {

/* Execution configurations */
extern char *startAnalysisFromSymbol;
extern char startAnalysisFromEntry;
extern std::set<__uint> startAnalysisFromAddr;
extern std::set<__uint> startAnalysisFromOffset;
extern std::set<__uint> stopAnalysisFromAddr;
Expand Down
6 changes: 6 additions & 0 deletions src/main.cpp
Expand Up @@ -323,6 +323,12 @@ static void callbackThreadExit(THREADID threadId, const CONTEXT *ctx, sint32 fla

/* Image instrumentation */
static void IMG_Instrumentation(IMG img, VOID *v) {
/* Lock / Unlock the Analysis from a Entry point */
if (PyTritonOptions::startAnalysisFromEntry){
PyTritonOptions::startAnalysisFromEntry = false;
PyTritonOptions::startAnalysisFromAddr.insert(IMG_Entry(img));
}

/* Lock / Unlock the Analysis from a symbol */
if (PyTritonOptions::startAnalysisFromSymbol != nullptr){

Expand Down

0 comments on commit 2f26f69

Please sign in to comment.