From a96f260da26f431291ddb2723063179a692d23b3 Mon Sep 17 00:00:00 2001 From: bloodstalker Date: Tue, 28 Nov 2017 08:23:34 +0330 Subject: python driver wip, obfuscator updated and readme, general readme updates --- bruiser/README.md | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) (limited to 'bruiser') diff --git a/bruiser/README.md b/bruiser/README.md index cd4e341..97c0f67 100644 --- a/bruiser/README.md +++ b/bruiser/README.md @@ -6,30 +6,33 @@ Regarding the actual functionality, it will feature non-blind selective mutation ### How does it work? To put it simply, bruiser is an interactive lua interpreter that uses linenoise for shell-like features(history, tab-completion, auto-suggestion). You get the full power of lua plus the bruiser functions whcih are implemented as lua scripts that call back to the cpp code to get things done.
-To put this into perspecttive, think you run `list vars` in bruiser. It gets you the list of vars but that's it. You can't save them to a file or do anything else with them. With the old way of doing things I had to add a command that did that and then you could do it but what if you wanted to do something else? what then? well you get the idea. That would also mean that bruiser's language would be made up gradually which would result in something ugly and warrant a lot of rewrites.
+To put this into perspective, think you run `list vars` in bruiser. It gets you the list of vars but that's it. You can't save them to a file or do anything else with them. With the old way of doing things I had to add a command that did that and then you could do it but what if you wanted to do something else? What then? Well you get the idea. That would also mean that bruiser's language would be made up gradually which would result in something ugly and warrant a lot of rewrites.
With the new way of doing things, the user is only limited by their imagination and lua, not me, and there is no learning curve for learning a garbage language that I would have to come up with.
-Also, there is no reason to implement any extra features to be able to automate your use of bruiser. just run a lua script and tell bruiser to run that.
+Also, there is no reason to implement any extra features to be able to automate your use of bruiser. Just run a lua script and tell bruiser to run that.
### DSL? -bruiser has an embedded lua interpreter so nobody would have to deal with a new DSL. It's good old lua.
+Bruiser has an embedded lua interpreter so nobody would have to deal with a new DSL. It's good old lua.
### Lua vs Luajit In the current implementation, bruiser will only support lua and not luajit. luajit is way faster than lua which will play an important role in bruiser's overall performance but luajit is generally less stable than lua and usually behind in terms of what new features of lua the language it supports.
The plan is to add both and for the user to be able to pick which one to use when running bruiser.
+### Prototyping +I embedded the ability to run python scripts from C++ in bruiser. The feature was added to facilitate fast prototyping since I'd rather first do the experimental features in python and run them through bruiser and then re-implement them in C++ if speed is an actual concern.
+ ### Warning The current implementation loads all lua libraries which also includes it's `os` library. To give you an idea, `os.execute()` is very similar to `system()` in C. This decision has been made to speed up testing and the dev process.
Also like `mutatord` and `mutatorclient`, bruiser does not need any sudo access.
### Non-blind Selective mutation? -bruiser looks at your code, learns your code and then decides how to mutate your code. That's non-blind selective mutation. now onto a real explanation:
-`m0` generates two sets of reports. one is the rules it checks on code which is for the better part, at the time of writing this very similar to Misra-c. The second report is the ancestry of the node that caused `m0` to tag a node in the first report. the second report is an experimental first attempt at narrowing down the parts of the code that would be better targets for mutation.
-The second point concerns the mutation opertors. The classical mutation operators are blind. Let me demonstrate with an example:
+Bruiser looks at your code, learns your code and then decides how to mutate your code. That's non-blind selective mutation. Now onto a real explanation:
+`m0` generates two sets of reports. One is the rules it checks on code which is for the better part, at the time of writing this very similar to Misra-c. The second report is the ancestry of the node that caused `m0` to tag a node in the first report. The second report is an experimental first attempt at narrowing down the parts of the code that would be better targets for mutation.
+The second point concerns the mutation operators. The classical mutation operators are blind. Let me demonstrate with an example:
Imagine we have a classical mutation operator that mutates all `+` operators to `-`. This mutation operator is blind. To put it in simple terms, it takes in text and spits out text with no regards to syntax or semantics.
`bruiser` will not be using classical blind mutation operators.
### How? -I'm going to wrire about it as soon as I get my thoughts organized. In the meantime you can look at the source code for some hints.
+I'm going to write about it as soon as I get my thoughts organized. In the meantime you can look at the source code for some hints.
### Example First you should clone the mutator repo and run `git submodule init` and `git submodule update` to get the cool third-party repos that enable mutator to run.
@@ -43,7 +46,7 @@ After building bruiser, you can run it like any other mutator tool. So for examp ``` After that you can just run your commands.
-To run you commands from a lua file, you can just use `dofile()` to call your script. bruiser has an embedded lua interpreter with the bruiser functions registered in it, so you do have full access to all lua libraries and functionalities plus the added bruiser functionality.
+To run you commands from a lua file, you can just use `dofile()` to call your script. Bruiser has an embedded lua interpreter with the bruiser functions registered in it, so you do have full access to all lua libraries and functionalities plus the added bruiser functionality.
For example you can run one of the example scripts that come with bruiser like this:
```lua @@ -59,4 +62,4 @@ You can also run bruiser in non-cli mode:
``` -bruiser requires a compilation database to run. If you don't have a compilation database, take a look at [Bear](https://github.com/rizsotto/Bear). If you're using `cmake`, just tell it to generate a compilation database.
+Bruiser requires a compilation database to run. If you don't have a compilation database, take a look at [Bear](https://github.com/rizsotto/Bear). If you're using `cmake`, just tell it to generate a compilation database.
-- cgit v1.2.3