The purpose of the Introduction is to go through the main directory of MAMBO, set up an empty plugin and compile and run a test application.
Important
Before continuing make sure MAMBO_ROOT is correctly set by running echo $MAMBO_ROOT. If the path does not point to the root directory of MAMBO export it with:
export MAMBO_ROOT=<your-mambo-dir>We build the test application with make:
cd $MAMBO_ROOT/docs/tutorials/hipeac2024/introduction/code
makeNote
Do not change the makefile of the test binary. We compile it with -O0 and -g to make analysis more interesting.
Copy the makefile from $MAMBO_ROOT/tutorials/hipeac2024/introduction/mambo to your MAMBO repository to replace the existing makefile. This file includes the new plugin into the build process.
cp $MAMBO_ROOT/docs/tutorials/hipeac2024/introduction/mambo/makefile $MAMBO_ROOTThen, copy the initial plugin template into $MAMBO_ROOT/plugins/tutorial.c:
cp $MAMBO_ROOT/docs/tutorials/hipeac2024/introduction/code/tutorial.c $MAMBO_ROOT/plugins/Re-build MAMBO with the newly created plugin and the copied Makefile:
cd $MAMBO_ROOT
makeTip
You can easily add/remove plugins from the MAMBO makefile with, for example:
PLUGINS+=plugins/my_plugin.c plugins/my_plugin_helpers.c
In line 12 of the copied makefile, the new plugin was added in the same way.
Run the test binary.
./dbm $MAMBO_ROOT/docs/tutorials/hipeac2024/introduction/code/testNote
Binary should run under MAMBO and nothing unexpected should happen as plugin does not do anything.
The expected output is:
2^16 = 65536
Now it is a good time to look into the test application and see what it does. The code can be found in $MAMBO_ROOT/docs/tutorials/hipeac2024/introduction/code/test.c:
int main(int argc, char* argv[]) {
int base = 2;
int result = 1;
for(int i = 0; i < 16; i++) {
result *= base;
}
printf("2^16 = %d\n", result);
}The program simply calculates 2 to the power of 16 by using a repeated multiplication, and prints the result. When dynamically analysing the binary it should be expected for some parts of the code to run only once (e.g., printf), and for some to run 16 times (e.g., multiplication inside the loop).
This is the end of Introduction. Feel free to ask us questions or proceed to Exercise 1.