Compare commits
38 Commits
comparison
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 2d29267454 | |||
| 7fe22fdc62 | |||
| ea00123e40 | |||
| bb5bd436d0 | |||
| d732fa8919 | |||
| 632913638c | |||
| 5fa52a198b | |||
| 3e55faa4bd | |||
| 783ef586f8 | |||
| 63e9ca046f | |||
| d028bfb65d | |||
| 98484db389 | |||
| 4773bc7515 | |||
| cb08e67d89 | |||
| 5016718283 | |||
| f4e816d769 | |||
| 44c8b21c9b | |||
| 8712bdc461 | |||
| 30121e4543 | |||
| ced069df55 | |||
| 5b47630fab | |||
| a0cb199a34 | |||
| 8770d834a4 | |||
| 4c91cf7a6e | |||
| b48c5b4921 | |||
| a4378a7c8e | |||
| 3a2d3caa0d | |||
| accb0d1e11 | |||
| 71612ad391 | |||
| 42c02c2199 | |||
| fdf999d0af | |||
| 92487d1d18 | |||
| 786d5cac35 | |||
| c68588919d | |||
| d35b7038c3 | |||
| 3e16cee2f1 | |||
| ac6f3ead77 | |||
| 3891b11ef1 |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -4,3 +4,5 @@ bin/
|
|||||||
*.o
|
*.o
|
||||||
*.log
|
*.log
|
||||||
*.pdf
|
*.pdf
|
||||||
|
related-work/
|
||||||
|
main
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# File: intercept
|
||||||
|
# Author: Lorenz Stechauner <e12119052@student.tuwien.ac.at>
|
||||||
|
# Lorenz Stechauner <lorenz.stechauner@necronda.net>
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
import subprocess
|
import subprocess
|
||||||
import os
|
import os
|
||||||
|
|||||||
@@ -1,4 +1,10 @@
|
|||||||
|
|
||||||
|
/**
|
||||||
|
* File: intercept.c
|
||||||
|
* Author: Lorenz Stechauner <e12119052@student.tuwien.ac.at>
|
||||||
|
* Lorenz Stechauner <lorenz.stechauner@necronda.net>
|
||||||
|
*/
|
||||||
|
|
||||||
#define _GNU_SOURCE
|
#define _GNU_SOURCE
|
||||||
|
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
@@ -1226,7 +1232,7 @@ int sym(getopt)(const int argc, char *const argv[], const char *shortopts) {
|
|||||||
else if_invalid(getopt)
|
else if_invalid(getopt)
|
||||||
}
|
}
|
||||||
const int ret = __real_getopt(argc, argv, shortopts);
|
const int ret = __real_getopt(argc, argv, shortopts);
|
||||||
msg("return %i", ret);
|
msg("return %i; optind %i", ret, optind);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1240,7 +1246,7 @@ void sym(exit)(int status) {
|
|||||||
char msg_buf[BUFFER_SIZE];
|
char msg_buf[BUFFER_SIZE];
|
||||||
rcv(msg_buf, sizeof(msg_buf));
|
rcv(msg_buf, sizeof(msg_buf));
|
||||||
if_modify_int("exit", int, status)
|
if_modify_int("exit", int, status)
|
||||||
else if_invalid(getopt)
|
else if_invalid(exit)
|
||||||
}
|
}
|
||||||
__real_exit(status);
|
__real_exit(status);
|
||||||
}
|
}
|
||||||
@@ -1419,7 +1425,7 @@ int sym(sigaction)(int sig, const struct sigaction *restrict act, struct sigacti
|
|||||||
if (sigismember(&act->sa_mask, i) != 1)
|
if (sigismember(&act->sa_mask, i) != 1)
|
||||||
continue;
|
continue;
|
||||||
if (maskstr[0] != 0) strcat(maskstr, ",");
|
if (maskstr[0] != 0) strcat(maskstr, ",");
|
||||||
strcat(maskstr, getsigstr(i));
|
sprintf(maskstr + strlen(maskstr), "%i:%s", i, getsigstr(i));
|
||||||
}
|
}
|
||||||
if (!verbosity) {
|
if (!verbosity) {
|
||||||
msg("sigaction(%i:%s, %p:{}, %p)" ret_str, sig, sigstr, act, oact, ret_data);
|
msg("sigaction(%i:%s, %p:{}, %p)" ret_str, sig, sigstr, act, oact, ret_data);
|
||||||
@@ -1462,7 +1468,7 @@ int sym(sigaction)(int sig, const struct sigaction *restrict act, struct sigacti
|
|||||||
if (sigismember(&oact->sa_mask, i) != 1)
|
if (sigismember(&oact->sa_mask, i) != 1)
|
||||||
continue;
|
continue;
|
||||||
if (maskstr[0] != 0) strcat(maskstr, ",");
|
if (maskstr[0] != 0) strcat(maskstr, ",");
|
||||||
strcat(maskstr, getsigstr(i));
|
sprintf(maskstr + strlen(maskstr), "%i:%s", i, getsigstr(i));
|
||||||
}
|
}
|
||||||
msg("return %i; errno %s; oact={sa_flags: 0x%x:%s, %s: %p, sa_mask: [%s]}", ret, strerrorname_np(errno), oact->sa_flags, flgstr, name, ptr, maskstr);
|
msg("return %i; errno %s; oact={sa_flags: 0x%x:%s, %s: %p, sa_mask: [%s]}", ret, strerrorname_np(errno), oact->sa_flags, flgstr, name, ptr, maskstr);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
6
proj/perf/.gitignore
vendored
Normal file
6
proj/perf/.gitignore
vendored
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
main
|
||||||
|
server
|
||||||
|
*.csv
|
||||||
|
*.txt
|
||||||
|
*.log
|
||||||
|
*.zip
|
||||||
19
proj/perf/Makefile
Normal file
19
proj/perf/Makefile
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
|
||||||
|
CC=gcc
|
||||||
|
CFLAGS=-std=c99 -pedantic -Wall -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_SVID_SOURCE -D_POSIX_C_SOURCE=200809L -g
|
||||||
|
|
||||||
|
.PHONY: all clean
|
||||||
|
all: default
|
||||||
|
default: main server
|
||||||
|
|
||||||
|
%.o: %.c
|
||||||
|
$(CC) -c -o $@ $^ $(CFLAGS)
|
||||||
|
|
||||||
|
main: main.o
|
||||||
|
$(CC) -o $@ $^ $(CFLAGS) -lc
|
||||||
|
|
||||||
|
server: server.o
|
||||||
|
$(CC) -o $@ $^ $(CFLAGS) -lc
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -rf main *.o
|
||||||
33
proj/perf/main.c
Normal file
33
proj/perf/main.c
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <time.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
int main(const int argc, const char *argv[]) {
|
||||||
|
if (argc != 2) {
|
||||||
|
fprintf(stderr, "usage: main <cycles>\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
const long cycles = strtol(argv[1], NULL, 10);
|
||||||
|
|
||||||
|
struct timespec start, end;
|
||||||
|
clock_gettime(CLOCK_MONOTONIC, &start);
|
||||||
|
|
||||||
|
int pipes[2];
|
||||||
|
for (int i = 0; i < cycles; i++) {
|
||||||
|
if (pipe(pipes) != 0) {
|
||||||
|
fprintf(stderr, "unable to create pipes: %s\n", strerror(errno));
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
close(pipes[0]);
|
||||||
|
close(pipes[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
clock_gettime(CLOCK_MONOTONIC, &end);
|
||||||
|
const long duration = end.tv_sec * 1000000000 + end.tv_nsec - start.tv_sec * 1000000000 - start.tv_nsec;
|
||||||
|
printf("start: %li.%09li\nend: %li.%09li\nduration: %li,%03li,%03li ns\n", start.tv_sec, start.tv_nsec, end.tv_sec, end.tv_nsec, duration / 1000000, duration / 1000 % 1000, duration % 1000);
|
||||||
|
}
|
||||||
67
proj/perf/server.c
Normal file
67
proj/perf/server.c
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <sys/un.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
int main(const int argc, const char *argv[]) {
|
||||||
|
if (argc != 3) {
|
||||||
|
fprintf(stderr, "usage: server <path> <mode>\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *path = argv[1];
|
||||||
|
const char *mode = argv[2];
|
||||||
|
|
||||||
|
int fd;
|
||||||
|
if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) {
|
||||||
|
fprintf(stderr, "unable to create socket: %s\n", strerror(errno));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct sockaddr_un addr = {.sun_family = AF_UNIX};
|
||||||
|
strcpy(addr.sun_path, path);
|
||||||
|
if (bind(fd, (struct sockaddr *) &addr, sizeof(addr)) != 0) {
|
||||||
|
fprintf(stderr, "unable to bind socket: %s\n", strerror(errno));
|
||||||
|
close(fd);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (listen(fd, 4) != 0) {
|
||||||
|
fprintf(stderr, "unable to listen on socket: %s\n", strerror(errno));
|
||||||
|
close(fd);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t len = 4096;
|
||||||
|
char *line = malloc(len);
|
||||||
|
while (1) {
|
||||||
|
int client_fd;
|
||||||
|
if ((client_fd = accept(fd, NULL, NULL)) == -1) {
|
||||||
|
fprintf(stderr, "unable to accept connection: %s\n", strerror(errno));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
FILE *client;
|
||||||
|
if ((client = fdopen(client_fd, "w+")) == NULL) {
|
||||||
|
fprintf(stderr, "unable open stream: %s\n", strerror(errno));
|
||||||
|
close(client_fd);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int n = 0; getline(&line, &len, client) > 0; n++) {
|
||||||
|
if (n % 2 == 1) {
|
||||||
|
fprintf(client, "%s\n", mode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(client);
|
||||||
|
}
|
||||||
|
|
||||||
|
free(line);
|
||||||
|
close(fd);
|
||||||
|
unlink(path);
|
||||||
|
}
|
||||||
35
proj/perf/test.sh
Executable file
35
proj/perf/test.sh
Executable file
@@ -0,0 +1,35 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
REPEAT=30
|
||||||
|
CYCLES=50
|
||||||
|
|
||||||
|
function test() {
|
||||||
|
echo $@
|
||||||
|
for c in $(seq 1 $CYCLES); do
|
||||||
|
for i in $(seq 1 $REPEAT); do
|
||||||
|
echo "cycles: $((c * 100)) ($i/$REPEAT)"
|
||||||
|
$@ $((c * 100))
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
rm -f /tmp/test.ok.sock /tmp/test.return.sock /tmp/intercept.performance.ok.sock /tmp/intercept.performance.return.sock
|
||||||
|
./server /tmp/test.ok.sock 'ok' &
|
||||||
|
./server /tmp/test.return.sock 'return 0' &
|
||||||
|
|
||||||
|
test ./main
|
||||||
|
cd ../intercept
|
||||||
|
test ./intercept -o -i - -- ../perf/main
|
||||||
|
test ./intercept -o -i stderr -- ../perf/main
|
||||||
|
test ./intercept -o -i file:out.log -- ../perf/main
|
||||||
|
|
||||||
|
cd ../server/src
|
||||||
|
./performance -m ok &
|
||||||
|
./performance -m return &
|
||||||
|
cd ../../intercept
|
||||||
|
sleep 1
|
||||||
|
test ./intercept -o -i unix:/tmp/test.ok.sock -- ../perf/main
|
||||||
|
test ./intercept -o -i unix:/tmp/test.return.sock -- ../perf/main
|
||||||
|
test ./intercept -o -i unix:/tmp/intercept.performance.ok.sock -- ../perf/main
|
||||||
|
test ./intercept -o -i unix:/tmp/intercept.performance.return.sock -- ../perf/main
|
||||||
@@ -1,6 +1,10 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# File: intercept/__init__.py
|
||||||
|
# Author: Lorenz Stechauner <e12119052@student.tuwien.ac.at>
|
||||||
|
# Lorenz Stechauner <lorenz.stechauner@necronda.net>
|
||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
from typing import Optional, TypedDict, NamedTuple, NotRequired, BinaryIO
|
from typing import Optional, TypedDict, NamedTuple, NotRequired, BinaryIO
|
||||||
from socketserver import UnixStreamServer, StreamRequestHandler, ThreadingMixIn
|
from socketserver import UnixStreamServer, StreamRequestHandler, ThreadingMixIn
|
||||||
@@ -23,7 +27,7 @@ class Flags(NamedTuple):
|
|||||||
flags: list[str]
|
flags: list[str]
|
||||||
|
|
||||||
StructTimeSpec = TypedDict('StructTimeSpec', {'tv_sec': int, 'tv_nsec': int})
|
StructTimeSpec = TypedDict('StructTimeSpec', {'tv_sec': int, 'tv_nsec': int})
|
||||||
StructSigAction = TypedDict('StructSigAction', {'sa_flags': Flags, 'sa_handler': NotRequired[Pointer], 'sa_sigaction': NotRequired[Pointer], 'sa_mask': list[str]})
|
StructSigAction = TypedDict('StructSigAction', {'sa_flags': Flags, 'sa_handler': NotRequired[Pointer], 'sa_sigaction': NotRequired[Pointer], 'sa_mask': list[Constant]})
|
||||||
StructSockAddr = TypedDict('StructSockAddr', {'sa_family': Constant, 'sa_data': NotRequired[bytes],
|
StructSockAddr = TypedDict('StructSockAddr', {'sa_family': Constant, 'sa_data': NotRequired[bytes],
|
||||||
'sun_path': NotRequired[bytes],
|
'sun_path': NotRequired[bytes],
|
||||||
'sin_addr': NotRequired[bytes], 'sin_port': NotRequired[int],
|
'sin_addr': NotRequired[bytes], 'sin_port': NotRequired[int],
|
||||||
@@ -263,7 +267,7 @@ class Parser:
|
|||||||
idx += 1
|
idx += 1
|
||||||
value = int(value, 0) if value != '(nil)' else 0
|
value = int(value, 0) if value != '(nil)' else 0
|
||||||
return PointerTo(val, value), idx
|
return PointerTo(val, value), idx
|
||||||
m = re.match(r'[A-Z0-9_]+', argument[idx:])
|
m = re.match(r'[A-Z0-9_]+|\?', argument[idx:])
|
||||||
if m is not None:
|
if m is not None:
|
||||||
value = m.group(0)
|
value = m.group(0)
|
||||||
idx += len(value)
|
idx += len(value)
|
||||||
@@ -302,6 +306,8 @@ class Parser:
|
|||||||
self.pid, self.tid = int(pid), int(tid)
|
self.pid, self.tid = int(pid), int(tid)
|
||||||
if len(self.stack) == 0:
|
if len(self.stack) == 0:
|
||||||
self.stack[(self.pid, self.tid)] = []
|
self.stack[(self.pid, self.tid)] = []
|
||||||
|
elif (self.pid, self.tid) not in self.stack:
|
||||||
|
self.stack[(self.pid, self.tid)] = []
|
||||||
if not data.startswith(b'return ') and not data == b'return':
|
if not data.startswith(b'return ') and not data == b'return':
|
||||||
call = data.decode('utf-8')
|
call = data.decode('utf-8')
|
||||||
#print(f'[{self.pid}][{self.tid}] {call}')
|
#print(f'[{self.pid}][{self.tid}] {call}')
|
||||||
@@ -344,6 +350,10 @@ class Parser:
|
|||||||
other_vals = ret[1].strip() if len(ret) > 1 else ''
|
other_vals = ret[1].strip() if len(ret) > 1 else ''
|
||||||
ret_value, _ = Parser.parse_arg(ret[0][7:])
|
ret_value, _ = Parser.parse_arg(ret[0][7:])
|
||||||
kwargs = {}
|
kwargs = {}
|
||||||
|
if other_vals.startswith('optind '):
|
||||||
|
ret = other_vals[7:].split(';', 1)
|
||||||
|
kwargs['optind'] = int(ret[0].strip())
|
||||||
|
other_vals = ret[1].strip() if len(ret) > 1 else ''
|
||||||
if other_vals.startswith('errno '):
|
if other_vals.startswith('errno '):
|
||||||
ret = other_vals[6:].split(';', 1)
|
ret = other_vals[6:].split(';', 1)
|
||||||
kwargs['errno'] = ret[0].strip()
|
kwargs['errno'] = ret[0].strip()
|
||||||
@@ -404,7 +414,7 @@ class Parser:
|
|||||||
def before_getopt(self, argc: int, argv: PointerTo[list[PointerTo[bytes]]], optstring: PointerTo[bytes]) -> str:
|
def before_getopt(self, argc: int, argv: PointerTo[list[PointerTo[bytes]]], optstring: PointerTo[bytes]) -> str:
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
def after_getopt(self, argc: int, argv: PointerTo[list[PointerTo[bytes]]], optstring: PointerTo[bytes],
|
def after_getopt(self, argc: int, argv: PointerTo[list[PointerTo[bytes]]], optstring: PointerTo[bytes],
|
||||||
ret_value: int) -> None:
|
ret_value: int, optind: int = None) -> None:
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
def before_exit(self, status: int) -> str:
|
def before_exit(self, status: int) -> str:
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# File: intercept/standard.py
|
||||||
|
# Author: Lorenz Stechauner <e12119052@student.tuwien.ac.at>
|
||||||
|
# Lorenz Stechauner <lorenz.stechauner@necronda.net>
|
||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
from intercept import *
|
from intercept import *
|
||||||
|
|
||||||
|
|||||||
45
proj/server/src/performance
Executable file
45
proj/server/src/performance
Executable file
@@ -0,0 +1,45 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# File: performance
|
||||||
|
# Author: Lorenz Stechauner <e12119052@student.tuwien.ac.at>
|
||||||
|
# Lorenz Stechauner <lorenz.stechauner@necronda.net>
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
|
||||||
|
import intercept
|
||||||
|
import intercept.standard
|
||||||
|
|
||||||
|
|
||||||
|
MODE: str
|
||||||
|
|
||||||
|
|
||||||
|
class Handler(intercept.standard.Handler):
|
||||||
|
def before_pipe(self, fildes_ptr: intercept.Pointer) -> str:
|
||||||
|
return 'return 0' if MODE == 'return' else 'ok'
|
||||||
|
|
||||||
|
def after_pipe(self, fildes_ptr: intercept.Pointer,
|
||||||
|
ret_value: int, errno: str = None, fildes: list[int] = None) -> None:
|
||||||
|
pass
|
||||||
|
|
||||||
|
def before_close(self, fildes: int) -> str:
|
||||||
|
return 'return 0' if MODE == 'return' else 'ok'
|
||||||
|
|
||||||
|
def after_close(self, fildes: int,
|
||||||
|
ret_value: int, errno: str = None) -> None:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> None:
|
||||||
|
global MODE
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument('-m', '--mode', choices=['ok', 'return'])
|
||||||
|
args = parser.parse_args()
|
||||||
|
MODE = args.mode
|
||||||
|
|
||||||
|
socket_name = f'/tmp/intercept.performance.{MODE}.sock'
|
||||||
|
intercept.intercept(socket_name, Handler)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
@@ -1,6 +1,10 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# File: test-interrupts
|
||||||
|
# Author: Lorenz Stechauner <e12119052@student.tuwien.ac.at>
|
||||||
|
# Lorenz Stechauner <lorenz.stechauner@necronda.net>
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import argparse
|
import argparse
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# File: test-memory
|
||||||
|
# Author: Lorenz Stechauner <e12119052@student.tuwien.ac.at>
|
||||||
|
# Lorenz Stechauner <lorenz.stechauner@necronda.net>
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
import subprocess
|
import subprocess
|
||||||
import os
|
import os
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# File: test-return-values
|
||||||
|
# Author: Lorenz Stechauner <e12119052@student.tuwien.ac.at>
|
||||||
|
# Lorenz Stechauner <lorenz.stechauner@necronda.net>
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import argparse
|
import argparse
|
||||||
@@ -102,7 +106,7 @@ def main() -> None:
|
|||||||
entry[ret] = set()
|
entry[ret] = set()
|
||||||
entry[ret].add(tuple(c for c in iter_tree_ok(child)))
|
entry[ret].add(tuple(c for c in iter_tree_ok(child)))
|
||||||
|
|
||||||
allowed_cleanup_functions = ['malloc', 'free', 'freeaddrinfo', 'close', 'exit']
|
allowed_cleanup_functions = ['malloc', 'free', 'freeaddrinfo', 'close', 'exit', 'sigaction']
|
||||||
for call, errors in calls.items():
|
for call, errors in calls.items():
|
||||||
if len(errors) <= 1:
|
if len(errors) <= 1:
|
||||||
continue
|
continue
|
||||||
|
|||||||
1
thesis/.gitignore
vendored
1
thesis/.gitignore
vendored
@@ -2,6 +2,7 @@
|
|||||||
/intro.*
|
/intro.*
|
||||||
/example.*
|
/example.*
|
||||||
/*.pdf
|
/*.pdf
|
||||||
|
!/*v*.pdf
|
||||||
/*.txt
|
/*.txt
|
||||||
/_minted/
|
/_minted/
|
||||||
*.acn
|
*.acn
|
||||||
|
|||||||
BIN
thesis/intercept_v0.0.pdf
Normal file
BIN
thesis/intercept_v0.0.pdf
Normal file
Binary file not shown.
BIN
thesis/intercept_v0.1.pdf
Normal file
BIN
thesis/intercept_v0.1.pdf
Normal file
Binary file not shown.
BIN
thesis/intercept_v0.2.pdf
Normal file
BIN
thesis/intercept_v0.2.pdf
Normal file
Binary file not shown.
BIN
thesis/intercept_v1.0.pdf
Normal file
BIN
thesis/intercept_v1.0.pdf
Normal file
Binary file not shown.
BIN
thesis/intercept_v1.1.pdf
Normal file
BIN
thesis/intercept_v1.1.pdf
Normal file
Binary file not shown.
BIN
thesis/intercept_v2.0.pdf
Normal file
BIN
thesis/intercept_v2.0.pdf
Normal file
Binary file not shown.
@@ -1,3 +1,9 @@
|
|||||||
% Abstract
|
% Abstract
|
||||||
|
|
||||||
Lorem Ipsum.
|
This thesis presents methods for intercepting and manipulating function calls in Linux systems, with a focus on supporting automated testing of student programs in the Operating Systems course.
|
||||||
|
The central contribution is the development of \texttt{intercept.so}, a shared object preloaded via the \texttt{LD\_PRELOAD} mechanism, which enables function call interception at runtime without requiring modifications to the program or its source code.
|
||||||
|
The library records detailed information about function calls, including arguments, return values, and call locations, allowing precise reconstruction and analysis of program execution.
|
||||||
|
Furthermore, it introduces controlled manipulation of intercepted calls---modifying arguments, forcing failures, or mocking return values---through a simple communication protocol, enabling robust automated tests of error handling and resource management.
|
||||||
|
Performance evaluations show minimal overhead in practical scenarios, making the approach suitable for educational use.
|
||||||
|
Compared to existing tools such as \texttt{strace} or \texttt{ltrace}, this solution offers greater flexibility by combining interception with manipulation capabilities.
|
||||||
|
Overall, the approach provides a flexible and transparent foundation for automated testing of low-level C programs, improving reliability while imposing negligible runtime overhead.
|
||||||
|
|||||||
@@ -1,3 +1,10 @@
|
|||||||
% Kurzfassung
|
% Kurzfassung
|
||||||
|
|
||||||
Lorem Ipsum.
|
Diese Arbeit stellt Methoden zum Abfangen und Manipulieren von Funktionsaufrufen in Linux-Systemen vor, mit dem Schwerpunkt auf der Unterstützung automatisierter Tests von Studierendenprogrammen im Rahmen der Betriebssysteme-Lehrveranstaltung.
|
||||||
|
Der zentrale Beitrag ist die Entwicklung von \texttt{intercept.so}, einer Shared Object-Bibliothek, die über den Mechanismus \texttt{LD\_PRELOAD} eingebunden wird und so das Abfangen von Funktionsaufrufen zur Laufzeit ermöglicht, ohne dass Änderungen am Programm oder dessen Quellcode erforderlich sind.
|
||||||
|
Die Bibliothek protokolliert detaillierte Informationen über Funktionsaufrufe, einschließlich Argumenten, Rückgabewerten und Aufrufstellen, wodurch eine präzise Rekonstruktion und Analyse der Programmausführung möglich wird.
|
||||||
|
Darüber hinaus erlaubt sie die kontrollierte Manipulation abgefangener Aufrufe -- etwa durch das Ändern von Argumenten, das Erzwingen von Fehlern oder das Simulieren von Rückgabewerten -- mittels eines einfachen Kommunikationsprotokolls.
|
||||||
|
Dies ermöglicht robuste automatisierte Tests zur Überprüfung von Fehlerbehandlung und Ressourcenverwaltung.
|
||||||
|
Leistungsmessungen zeigen, dass der Ansatz in praktischen Szenarien nur minimale Laufzeitkosten verursacht und sich somit gut für den Einsatz in der Lehre eignet.
|
||||||
|
Im Vergleich zu bestehenden Werkzeugen wie \texttt{strace} oder \texttt{ltrace} bietet die Lösung eine größere Flexibilität, da sie das Abfangen mit Manipulationsmöglichkeiten kombiniert.
|
||||||
|
Insgesamt stellt der Ansatz eine flexible und transparente Grundlage für automatisierte Tests von Low-Level-C-Programmen dar, verbessert deren Zuverlässigkeit und verursacht dabei nur vernachlässigbaren Laufzeit-Overhead.
|
||||||
|
|||||||
@@ -1,20 +1,56 @@
|
|||||||
|
|
||||||
\chapter{Introduction}\label{ch:introduction}
|
\chapter{Introduction}\label{ch:introduction}
|
||||||
|
|
||||||
Lorem Ipsum.
|
Intercepting (also known as Hooking, or Tracing) system or function calls allows one to trace what a given program does.
|
||||||
|
This information is useful for security analysis or when testing or verifying a program.
|
||||||
|
This chapter gives a general overview about what the motivation and goal for this work were (Section~\ref{sec:motivation-and-goal}), and what the difference between system calls and function calls is (Section~\ref{sec:definitions}).
|
||||||
|
|
||||||
\section{TODO: Why intercept?}
|
|
||||||
|
|
||||||
Lorem Ipsum.
|
\section{Motivation and Goal}\label{sec:motivation-and-goal}
|
||||||
|
|
||||||
\section{TODO: Why are current solutions not enough?}
|
When teaching students about Operating Systems, their interfaces, and standard libraries, C is still a widely used language, especially when using Linux.
|
||||||
|
Therefore, it is obvious why many university courses still require students to write their assignments and exams in C\@.
|
||||||
|
The problem when trying to verify whether students have correctly implemented their assignment, is that low-level OS constructs (like semaphores, pipes, sockets, memory management) make it hard to run automated tests, because the testing system needs to keep track, set up, and verify the usage of these resources.
|
||||||
|
|
||||||
Lorem Ipsum.
|
The goal of this work was to find a way to easily intercept system or function calls, and to verify if students called the right functions, with the right arguments, at the right time.
|
||||||
|
This restriction in scope allows focusing on simple binary programs without having to think about complex or I/O heavy programs.
|
||||||
|
Furthermore, in this setting the source code of the student's programs is obviously available, because this is what they need to deliver.
|
||||||
|
The availability of source code is a key concern when trying to intercept function or system calls, as will be clear in the next chapters.
|
||||||
|
|
||||||
\section{TODO: Linux/C/ELF call structure}
|
|
||||||
|
|
||||||
Lorem Ipsum.
|
\section{Definitions}\label{sec:definitions}
|
||||||
|
|
||||||
\section{TODO: System Calls vs. Function Calls}\label{sec:system-calls-vs-function-calls}
|
First, function calls, system calls, and their differences need to be defined.
|
||||||
|
The following subsections concern these definitions.
|
||||||
|
|
||||||
Lorem Ipsum.
|
|
||||||
|
\subsection{Function Calls}\label{subsec:function-calls}
|
||||||
|
|
||||||
|
Generally, a function in C (and also most other programming languages) is a piece of code that may be called, and therefore executed, from elsewhere.
|
||||||
|
Functions have zero or more arguments and return a single value.
|
||||||
|
When calling a function, the caller places the return address onto the stack.
|
||||||
|
This address indicates where the function should continue executing when it is finished.
|
||||||
|
|
||||||
|
Functions are used to structure programs, reuse functionality, or expose functionality in libraries.
|
||||||
|
Other languages than C differentiate between functions, methods, procedures, and so on.
|
||||||
|
A function written in the source code is almost always compiled to a function in the resulting binary.
|
||||||
|
|
||||||
|
Intercepting calls to functions allows one to see the function name, arguments, return value, and return address.
|
||||||
|
|
||||||
|
|
||||||
|
\subsection{System Calls}\label{subsec:system-calls}
|
||||||
|
|
||||||
|
In contrast to functions, system calls are calls to the kernel itself.
|
||||||
|
Many operations on a modern operating system require special privileges, which a simple user-space process does not have.
|
||||||
|
By invoking a system call, the (user-space) process hands control over to the (privileged) kernel, and requests an operation to be performed.
|
||||||
|
\cite[Chapter~10]{linuxkernel}
|
||||||
|
|
||||||
|
How exactly these system calls work depends on the architecture and operating system.
|
||||||
|
But generally, the process places the system call number and its arguments in defined registers and then executes a special system call opcode.
|
||||||
|
Then the kernel executes the requested operation and places the return value inside another register, and lastly hands the execution back to the process.
|
||||||
|
\cite[Chapter~10]{linuxkernel}
|
||||||
|
|
||||||
|
Intercepting system calls allows one to see the system call number, arguments, and return value.
|
||||||
|
One has to keep in mind, that many system-related functionalities are not, in fact, translated to system calls one-to-one.
|
||||||
|
For example, \texttt{malloc}~\cite{malloc.3} has no dedicated system call, it is managed by the C standard library internally.
|
||||||
|
Many system calls have corresponding wrapper functions in the C standard library (like \texttt{open}, \texttt{close}, \texttt{sem\_wait}).
|
||||||
|
|||||||
139
thesis/src/02.related-work.tex
Normal file
139
thesis/src/02.related-work.tex
Normal file
@@ -0,0 +1,139 @@
|
|||||||
|
|
||||||
|
\chapter{Related Work}\label{ch:related-work}
|
||||||
|
|
||||||
|
This chapter gives a rough overview on techniques and methods to intercept or hook system calls and function calls.
|
||||||
|
See also Section~\ref{sec:methods-for-intercepting}.
|
||||||
|
Some relevant methods will be discussed there in more detail.
|
||||||
|
|
||||||
|
|
||||||
|
\section{System and Function Call Hooking in Literature}\label{sec:call-hooking-in-literature}
|
||||||
|
|
||||||
|
The following subsections explore some applications of system and function call hooking.
|
||||||
|
There are possibly many other use-cases, but the following were deemed most important.
|
||||||
|
|
||||||
|
|
||||||
|
\subsection{Classification of Hooking Techniques}\label{subsec:classification}
|
||||||
|
|
||||||
|
Lopez et al. \cite{lopez2017} classify subroutine hooking techniques as follows:
|
||||||
|
|
||||||
|
\begin{itemize}
|
||||||
|
\setlength\itemsep{0em}
|
||||||
|
\item Subroutine Type: Function / System call.
|
||||||
|
\item Hook Insertion: Static (before execution) / Dynamic (during execution).
|
||||||
|
\item Instrumentation Type: Active (``manipulation'') / Passive (``interception'').
|
||||||
|
\item Hooking Location: On-device / Off-device (most used for mobile devices).
|
||||||
|
\item Hooking Scope: Inner Functions / Exported Functions (e.g.,\ libraries).
|
||||||
|
\item OS Modification: Required / Not Required.
|
||||||
|
\item Availability of Source Code: Open-source / Closed-source.
|
||||||
|
\item Pricing Model: Free / Paid.
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
The technique developed in this work would be classified as follows:
|
||||||
|
Function, Static, Active+Passive, On-device, Exported Functions, OS Modification Not Required, target program may be Closed-source, Free.
|
||||||
|
|
||||||
|
|
||||||
|
\subsection{Linux Systems}\label{subsec:linux-systems}
|
||||||
|
|
||||||
|
Yasukata et al. \cite{zpoline} introduced zpoline, a system call hooking technique using binary rewriting.
|
||||||
|
See Subsection~\ref{subsec:zpoline} for more details.
|
||||||
|
Hong et al. \cite{datahook} developed DataHook, a system call hooking technique based on glibc.
|
||||||
|
See Subsection~\ref{subsec:datahook} for more details.
|
||||||
|
|
||||||
|
|
||||||
|
\subsection{Windows Systems}\label{subsec:windows-systems}
|
||||||
|
|
||||||
|
Hunt and Brubacher \cite{detours} developed Detours, a library for instrumenting arbitrary Win32 functions on x86 machines.
|
||||||
|
Detours intercepts Win32 functions by re-writing target function images.
|
||||||
|
Based on this method, Sze and Sekar developed Spif \cite{spif} (see next subsection).
|
||||||
|
|
||||||
|
|
||||||
|
\subsection{Security Applications}\label{subsec:security-applications}
|
||||||
|
|
||||||
|
Fraser et al. \cite{fraser2000} introduced a general mechanism for securing unmodified commercial software by wrapping system calls at the library interface.
|
||||||
|
They hook system calls by replacing the standard library entry points with wrapper functions, similar to \texttt{LD\_PRELOAD}.
|
||||||
|
The wrapper functions are able to perform security checks or other security measures.
|
||||||
|
|
||||||
|
Garfinkel et al. \cite{ostia} developed Ostia, a sandboxing system, which uses system call hooking to secure applications.
|
||||||
|
They implemented their own ELF binary loader to load their emulation library into memory before the sandboxed program starts.
|
||||||
|
To communicate between this library and their \textit{agent}, they use Unix domain sockets.
|
||||||
|
The \textit{agent} then responds, according to its policies.
|
||||||
|
This is a similar approach to the one of this work (see Chapter~\ref{ch:manipulating-function-calls}).
|
||||||
|
|
||||||
|
Sze and Sekar \cite{spif} introduced Spif, an approach that defends against malware by tracking code and data origin on Windows systems.
|
||||||
|
They use Detours \cite{detours} to intercept low-level Windows API calls.
|
||||||
|
|
||||||
|
Kern \cite{kern2023} discusses the use of \texttt{LD\_PRELOAD} in cloud environments for HTTP deception.
|
||||||
|
This is done to analyze malware or other adversaries in real environments without their knowledge and without any risk of danger.
|
||||||
|
Examples are to override the \texttt{send} and \texttt{recv} functions of libc.
|
||||||
|
With some modifications, the technique presented in this work may also be used in this context to intercept and manipulate \texttt{send} and \texttt{recv} calls.
|
||||||
|
|
||||||
|
|
||||||
|
\subsection{Software Distribution}\label{subsec:software-distribution}
|
||||||
|
|
||||||
|
Guo and Engler \cite{guo2011cde} use system call hooking for creating portable software.
|
||||||
|
They developed CDE, which logs all files a program accesses during execution, including shared libraries.
|
||||||
|
All accessed files and the environment are bundled together and may now be executed on any other system having a compatible kernel without having to install any dependencies.
|
||||||
|
This would also be possible with the use of logged function calls like in this work (e.g., see Section~\ref{sec:intercepting-example}).
|
||||||
|
|
||||||
|
|
||||||
|
\subsection{Rapid Prototyping}\label{subsec:rapid-prototyping}
|
||||||
|
|
||||||
|
Spillane et al. \cite{spillane2007} use \texttt{ptrace} to hook system calls of another process to simulate these calls using a user-space program.
|
||||||
|
This is useful for rapid prototyping (e.g., file systems) by developing a user-space program first, and then, using the gained insight, porting it into kernel-space.
|
||||||
|
|
||||||
|
|
||||||
|
\section{Function Call Hooking}\label{sec:function-call-hooking}
|
||||||
|
|
||||||
|
All underlying techniques for function call interception on Linux systems are mentioned in Section~\ref{sec:methods-for-intercepting}.
|
||||||
|
See \texttt{ltrace} (Subsection~\ref{subsec:ltrace}), wrapper functions (Subsection~\ref{subsec:wrapper-functions}), and \texttt{LD\_PRELOAD} (Subsection~\ref{subsec:preloading}).
|
||||||
|
|
||||||
|
|
||||||
|
\section{System Call Hooking}\label{sec:system-call-hooking}
|
||||||
|
|
||||||
|
This section discusses further techniques regarding system call interception.
|
||||||
|
This excludes techniques discussed in Section~\ref{sec:methods-for-intercepting},
|
||||||
|
like \texttt{ptrace} (Subsection~\ref{subsec:ptrace}), and \texttt{strace} (Subsection~\ref{subsec:strace}).
|
||||||
|
Almost all following methods use binary rewriting to replace system calls with other instructions (except SUD, Subsection~\ref{subsec:syscall-user-dispatch}).
|
||||||
|
This is one of the reasons why they are not mentioned in Section~\ref{sec:methods-for-intercepting}.
|
||||||
|
Another reason is that this work focuses on function call interception rather than system call interception.
|
||||||
|
|
||||||
|
|
||||||
|
\subsection{\texttt{int3} Signaling}\label{subsec:int3-signaling}
|
||||||
|
|
||||||
|
\texttt{int3} is a one-byte instruction (\texttt{0xcc}) that invokes a software interrupt.
|
||||||
|
On Linux, the kernel handles it and raises \texttt{SIGTRAP} to the user-space process that executed \texttt{int3}.
|
||||||
|
The \texttt{int3} signaling technique exploits this behavior to hook system calls; it replaces \texttt{syscall}/\texttt{sysenter} with \texttt{int3} and employs the signal handler for \texttt{SIGTRAP} as the hook function.
|
||||||
|
Since \texttt{int3} is one byte, it can replace an arbitrary instruction without breaking neighboring instructions.
|
||||||
|
This technique is traditionally used in debuggers to implement breakpoints.
|
||||||
|
However, signal handling incurs a large overhead because it involves context manipulation by the kernel.
|
||||||
|
\cite{zpoline}
|
||||||
|
|
||||||
|
|
||||||
|
\subsection{Syscall User Dispatch (SUD)}\label{subsec:syscall-user-dispatch}
|
||||||
|
|
||||||
|
Syscall User Dispatch (SUD)~\cite{sud} was added in Linux 5.11, and it offers a way to redirect system calls to arbitrary user-space code.
|
||||||
|
For the SUD feature, the kernel implements a hook point at the entry point of system calls.
|
||||||
|
A user-space process can activate SUD via the \texttt{prctl} interface.
|
||||||
|
When SUD is activated, the hook point raises \texttt{SIGSYS} to the user-space process.
|
||||||
|
This mechanism allows a user-space program to leverage the \texttt{SIGSYS} signal handler as the system call hook.
|
||||||
|
However, similarly to the \texttt{int3} signaling technique, SUD imposes a significant performance penalty on the user-space program due to the overhead of the signal handling.
|
||||||
|
\cite{zpoline}
|
||||||
|
|
||||||
|
|
||||||
|
\subsection{zpoline}\label{subsec:zpoline}
|
||||||
|
|
||||||
|
zpoline is a system call hook mechanism for x86-64 CPUs.
|
||||||
|
Binary rewriting is used to replace (two-byte) \texttt{syscall}/\texttt{sysenter} instructions with a (two-byte) \texttt{callq *\%rax} instruction.
|
||||||
|
Because this instruction jumps to \texttt{rax}, where also the syscall number is stored, the trampoline code has to be initialized beginning at virtual address 0.
|
||||||
|
zpoline is exhaustive and achieves very low performance reduction (28--761 times less overhead compared to other exhaustive system call hooking techniques).
|
||||||
|
\cite{zpoline}
|
||||||
|
|
||||||
|
|
||||||
|
\subsection{DataHook}\label{subsec:datahook}
|
||||||
|
|
||||||
|
DataHook is a system call hooking technique for 32-bit programs based on glibc running on x86 or x86-64 machines.
|
||||||
|
It relies on glibc's way of performing system calls, namely a \texttt{call *\%gs:0x10} instruction to call the \texttt{\_\_kernel\_vsyscall} function.
|
||||||
|
The content of \texttt{gs:0x10} is backed up and modified to jump to a given hook function.
|
||||||
|
DataHook is only exhaustive when used on glibc-based programs.
|
||||||
|
It achieves a very low performance reduction (5--1429 times less overhead compared to existing hooking techniques).
|
||||||
|
\cite{datahook}
|
||||||
@@ -1,18 +1,17 @@
|
|||||||
|
|
||||||
\chapter{Intercepting Function Calls}\label{ch:intercepting-function-calls}
|
\chapter{Intercepting Function Calls}\label{ch:intercepting-function-calls}
|
||||||
|
|
||||||
In this chapter all steps on how to intercept function calls in this work are discussed.
|
In this chapter, all steps on how to intercept function calls in this work are discussed.
|
||||||
An example of what the resulting interception looks like may be found in Section~\ref{sec:intercepting-example}.
|
An example of what the resulting interception looks like may be found in Section~\ref{sec:intercepting-example}.
|
||||||
Furthermore, an overview on how to test given programs is presented in Section~\ref{sec:automated-testing-on-intercepted-function-calls}.
|
Furthermore, an overview on how to test given programs is presented in Section~\ref{sec:automated-testing-on-intercepted-function-calls}.
|
||||||
This chapter does not discuss how these function calls may be manipulated in any way.
|
How these function calls may be manipulated is discussed in Chapter~\ref{ch:manipulating-function-calls}.
|
||||||
For that see Chapter~\ref{ch:manipulating-function-calls}.
|
|
||||||
|
|
||||||
|
|
||||||
\section{Identified Methods for Intercepting Function and System Calls}\label{sec:methods-for-intercepting}
|
\section{Identified Methods for Intercepting Function and System Calls}\label{sec:methods-for-intercepting}
|
||||||
|
|
||||||
First, one has to answer the question on \textit{how exactly} to intercept function or system calls.
|
First, one has to answer the question on \textit{how exactly} to intercept function or system calls.
|
||||||
At the beginning of this work it was not yet determined if the interception of function calls, system calls, or both should be used to achieve the overarching goal (see\todo{Goals}).
|
At the beginning of this work, it was not yet determined if the interception of function calls, system calls, or both should be used to achieve the overarching goal (see Section~\ref{sec:motivation-and-goal}).
|
||||||
This first section tries to list all possible methods on how to intercept function or system calls but does not claim completeness.
|
This first section tries to list all possible and relevant methods on how to intercept function or system calls but does not claim exhaustiveness.
|
||||||
The order of the following subsections is roughly based on the thought process on finding the most appropriate method suitable for this work.
|
The order of the following subsections is roughly based on the thought process on finding the most appropriate method suitable for this work.
|
||||||
|
|
||||||
|
|
||||||
@@ -57,8 +56,7 @@ exit_group(0) = ?
|
|||||||
\label{lst:strace}
|
\label{lst:strace}
|
||||||
\end{listing}
|
\end{listing}
|
||||||
|
|
||||||
This approach works great for debugging and other use-cases,
|
This approach works well for debugging and other use cases, but intercepting system calls alone does not satisfy the requirements of this work.
|
||||||
but only intercepting system calls does not statisfy the requirements for this work.
|
|
||||||
|
|
||||||
|
|
||||||
\subsection{\texttt{ltrace} Command}\label{subsec:ltrace}
|
\subsection{\texttt{ltrace} Command}\label{subsec:ltrace}
|
||||||
@@ -68,7 +66,7 @@ It works similarly to \texttt{strace} (see \ref{subsec:strace}).
|
|||||||
\cite{ltrace.1}
|
\cite{ltrace.1}
|
||||||
|
|
||||||
Listings~\ref{lst:main.c} and~\ref{lst:ltrace} illustrate what the output of \texttt{ltrace} looks like.
|
Listings~\ref{lst:main.c} and~\ref{lst:ltrace} illustrate what the output of \texttt{ltrace} looks like.
|
||||||
In contrast to the output of \texttt{strace} now only ``real'' calls to library functions are included in the output.
|
In contrast to the output of \texttt{strace}, now only ``real'' calls to library functions are included in the output.
|
||||||
Therefore, a lot less ``noise'' is generated (see omitted lines in Listing~\ref{lst:strace}).
|
Therefore, a lot less ``noise'' is generated (see omitted lines in Listing~\ref{lst:strace}).
|
||||||
Again, the function arguments are displayed in a ``pretty'' way.
|
Again, the function arguments are displayed in a ``pretty'' way.
|
||||||
This command uses so-called prototype functions~\cite{ltrace.conf.5} to format function arguments.
|
This command uses so-called prototype functions~\cite{ltrace.conf.5} to format function arguments.
|
||||||
@@ -135,7 +133,7 @@ See the gcc(1) Linux manual page~\cite[Section OPTIONS]{gcc.1}:
|
|||||||
This means, by specifying \texttt{-Wl,-{}-wrap=\textit{symbol}} when compiling using gcc,
|
This means, by specifying \texttt{-Wl,-{}-wrap=\textit{symbol}} when compiling using gcc,
|
||||||
all calls from the currently compiled program to \texttt{\textit{symbol}} are redirected to \texttt{\_\_wrap\_\textit{symbol}}.
|
all calls from the currently compiled program to \texttt{\textit{symbol}} are redirected to \texttt{\_\_wrap\_\textit{symbol}}.
|
||||||
To call the real function inside the wrapper, \texttt{\_\_real\_\textit{symbol}} may be used.
|
To call the real function inside the wrapper, \texttt{\_\_real\_\textit{symbol}} may be used.
|
||||||
Listings~\ref{lst:wrap.c} and~\ref{lst:wrap} try to illustrate this by overriding the \texttt{malloc} function of the C standard library.
|
Listings~\ref{lst:wrap.c} and~\ref{lst:wrap} illustrate this by overriding the \texttt{malloc} function of the C standard library.
|
||||||
|
|
||||||
\begin{listing}[htbp]
|
\begin{listing}[htbp]
|
||||||
\inputminted[linenos]{c}{src/listings/wrap.c}
|
\inputminted[linenos]{c}{src/listings/wrap.c}
|
||||||
@@ -159,7 +157,7 @@ Therefore, the source code (or the corresponding \texttt{*.out} files) needs to
|
|||||||
Note, only calls from the targeted source code will be redirected, calls from other libraries won't.
|
Note, only calls from the targeted source code will be redirected, calls from other libraries won't.
|
||||||
|
|
||||||
Theoretically, it should be possible to re-link a given binary without having access to its source code.
|
Theoretically, it should be possible to re-link a given binary without having access to its source code.
|
||||||
But due to other more straight-forward methods (see Subsection~\ref{subsec:preloading}), this has not been further investigated.
|
But due to other more straight-forward methods (see Subsection~\ref{subsec:preloading}), this has not been investigated further.
|
||||||
|
|
||||||
|
|
||||||
\subsection{Preloading using \texttt{LD\_PRELOAD}}\label{subsec:preloading}
|
\subsection{Preloading using \texttt{LD\_PRELOAD}}\label{subsec:preloading}
|
||||||
@@ -188,7 +186,7 @@ See the ld.so(8) Linux manual page~\cite[Section ENVIRONMENT]{ld.so.8}:
|
|||||||
\end{quote}
|
\end{quote}
|
||||||
|
|
||||||
This means, by setting the environment variable \texttt{LD\_PRELOAD}, it is possible to override specific functions.
|
This means, by setting the environment variable \texttt{LD\_PRELOAD}, it is possible to override specific functions.
|
||||||
Listings~\ref{lst:preload.c} and~\ref{lst:preload} try to illustrate this by overriding the \texttt{malloc} function of the C standard library.
|
Listings~\ref{lst:preload.c} and~\ref{lst:preload} illustrate this by overriding the \texttt{malloc} function of the C standard library.
|
||||||
|
|
||||||
\begin{listing}[htbp]
|
\begin{listing}[htbp]
|
||||||
\inputminted[linenos]{c}{src/listings/preload.c}
|
\inputminted[linenos]{c}{src/listings/preload.c}
|
||||||
@@ -211,17 +209,17 @@ The function \texttt{dlsym} is used to retrieve the original address of the \tex
|
|||||||
\cite{dlsym.3}
|
\cite{dlsym.3}
|
||||||
|
|
||||||
By using this method, it is possible to override, and therefore wrap, any function as long as the targeted binary was not statically linked.
|
By using this method, it is possible to override, and therefore wrap, any function as long as the targeted binary was not statically linked.
|
||||||
Although, one has to be aware that not only function calls inside the targeted binary, but also calls inside other libraries (e.g., to \texttt{malloc}) are redirected to the overriding function.
|
However, one must be aware that, not only function calls inside the targeted binary, but also calls inside other libraries (e.g., \texttt{malloc}), are redirected to the overriding function.
|
||||||
|
|
||||||
|
|
||||||
\subsection{Conclusion}\label{subsec:methods-for-intercepting-conclusion}
|
\subsection{Conclusion}\label{subsec:methods-for-intercepting-conclusion}
|
||||||
|
|
||||||
During the research on different approaches to intercepting system and function calls,
|
During the research on different approaches to intercepting system and function calls,
|
||||||
it has been found that the most reliable way to achieve the goals of this work (see \todo{Goals}) is to intercept function calls instead of system calls.
|
it has been found, that the most reliable way to achieve the goals of this work (see Section~\ref{sec:motivation-and-goal}) is to intercept function calls instead of system calls.
|
||||||
This is because (as long as the programs to test are dynamically linked), intercepting function calls allows one to intercept many more calls and in a more flexible way.
|
This is because---as long as the programs to test are dynamically linked---intercepting function calls allows one to intercept many more calls and in a more flexible way.
|
||||||
Therefore, from now on this work only considers function calls and no system calls directly.
|
Therefore, from now on this work only considers function calls and no system calls directly.
|
||||||
|
|
||||||
In this work preloading (see Subsection~\ref{subsec:preloading}) was chosen to be used
|
In this work, preloading (see Subsection~\ref{subsec:preloading}) was chosen to be used
|
||||||
because it is simple to use (``clean'' source code, easy to compile and run programs with it) and offers the means to arbitrarily execute code when the intercepted function call is redirected.
|
because it is simple to use (``clean'' source code, easy to compile and run programs with it) and offers the means to arbitrarily execute code when the intercepted function call is redirected.
|
||||||
The following sections concern the next steps in what else is needed to create a powerful ``interceptor''.
|
The following sections concern the next steps in what else is needed to create a powerful ``interceptor''.
|
||||||
|
|
||||||
@@ -231,7 +229,7 @@ The following sections concern the next steps in what else is needed to create a
|
|||||||
After deciding to use the preloading method to intercept function calls, a more detailed plan is needed to continue developing.
|
After deciding to use the preloading method to intercept function calls, a more detailed plan is needed to continue developing.
|
||||||
It was decided to have one single \texttt{intercept.so} file as a resulting artifact which then may be loaded via the \texttt{LD\_PRELOAD} environment variable.
|
It was decided to have one single \texttt{intercept.so} file as a resulting artifact which then may be loaded via the \texttt{LD\_PRELOAD} environment variable.
|
||||||
The easiest and most straightforward way to structure the source code was to put all code in one single C file.
|
The easiest and most straightforward way to structure the source code was to put all code in one single C file.
|
||||||
Listing~\ref{lst:intercept-preload.c} gives an overview over the grounding code structure.
|
Listing~\ref{lst:intercept-preload.c} gives an overview of the underlying code structure.
|
||||||
For each function that should be intercepted, this function simply has to be declared and defined the same way \texttt{malloc} was.
|
For each function that should be intercepted, this function simply has to be declared and defined the same way \texttt{malloc} was.
|
||||||
|
|
||||||
\begin{listing}[htbp]
|
\begin{listing}[htbp]
|
||||||
@@ -244,8 +242,8 @@ For each function that should be intercepted, this function simply has to be dec
|
|||||||
\section{Retrieving Function Argument Values}\label{sec:retrieving-function-argument-values}
|
\section{Retrieving Function Argument Values}\label{sec:retrieving-function-argument-values}
|
||||||
|
|
||||||
Now that the first steps have been done, one needs to think about what exactly to record when intercepting.
|
Now that the first steps have been done, one needs to think about what exactly to record when intercepting.
|
||||||
A simple notification that a given function was called would be too less.
|
A simple notification that a given function was called would not be sufficient.
|
||||||
Within the following subsections it is tried to get as much information as possible from each function call.
|
Within the following subsections, effort is put into getting as much information as possible from each function call.
|
||||||
|
|
||||||
As already mentioned, \texttt{ltrace} uses prototype functions to format its function arguments.
|
As already mentioned, \texttt{ltrace} uses prototype functions to format its function arguments.
|
||||||
This allows \texttt{ltrace} to ``dynamically'' display function arguments for any new or unknown functions without the need for recompilation.
|
This allows \texttt{ltrace} to ``dynamically'' display function arguments for any new or unknown functions without the need for recompilation.
|
||||||
@@ -255,13 +253,13 @@ However, due to implementation complexity reasons and the need for ``complex'' r
|
|||||||
This means that each function formats its arguments and return values itself without any configuration option.
|
This means that each function formats its arguments and return values itself without any configuration option.
|
||||||
|
|
||||||
The reason for retrieving as much information as possible from each function call is that at a later point in time it is possible to completely reconstruct the exact function calls and their sequence.
|
The reason for retrieving as much information as possible from each function call is that at a later point in time it is possible to completely reconstruct the exact function calls and their sequence.
|
||||||
This allows analysis on these records to be performed independently of the corresponding execution of the program.
|
This allows an analysis on these records to be performed independently of the corresponding execution of the program.
|
||||||
It should always be possible for any parser to fully parse the recorded calls without any specific knowledge of specific functions, their argument types, or return value type.
|
It should always be possible to fully parse the recorded calls without any specific knowledge of specific functions, their argument types, or return value type.
|
||||||
|
|
||||||
|
|
||||||
\subsection{Numbers}\label{subsec:retrieving-numbers}
|
\subsection{Numbers}\label{subsec:retrieving-numbers}
|
||||||
|
|
||||||
The most simple types of argument are plain numbers, like integers (\texttt{int}, \texttt{long}, \ldots) or floating point numbers (\texttt{float}, \texttt{double}).
|
The simplest types of arguments are plain numbers, like integers (\texttt{int}, \texttt{long}, \ldots) or floating point numbers (\texttt{float}, \texttt{double}).
|
||||||
(In fact, \textit{all} arguments are represented as numbers or integers.
|
(In fact, \textit{all} arguments are represented as numbers or integers.
|
||||||
See the following subsections for examples.)
|
See the following subsections for examples.)
|
||||||
Plain numbers may be formatted simply as what they are, in base 10 notation, or with a prefix like \texttt{0x} for hexadecimal or \texttt{0} for octal representation.
|
Plain numbers may be formatted simply as what they are, in base 10 notation, or with a prefix like \texttt{0x} for hexadecimal or \texttt{0} for octal representation.
|
||||||
@@ -270,8 +268,7 @@ Example: \texttt{malloc(123)} (or \texttt{malloc(0x7B)}).
|
|||||||
|
|
||||||
\subsection{Unspecific Pointers}\label{subsec:retrieving-unspecific-pointers}
|
\subsection{Unspecific Pointers}\label{subsec:retrieving-unspecific-pointers}
|
||||||
|
|
||||||
Pointers with no further information known about (like \texttt{void *}) are essentially integers.
|
Pointers without additional type information (such as \texttt{void *}) can essentially be treated as integers.
|
||||||
Therefore, they may be treated as such.
|
|
||||||
|
|
||||||
Example: \texttt{free(0x55624164b2a0)}.
|
Example: \texttt{free(0x55624164b2a0)}.
|
||||||
|
|
||||||
@@ -285,7 +282,7 @@ Special values inside the string are escaped with a backslash.
|
|||||||
|
|
||||||
Example: \texttt{sem\_unlink(0x1234:"/test-semaphore")}.
|
Example: \texttt{sem\_unlink(0x1234:"/test-semaphore")}.
|
||||||
|
|
||||||
Another type of ``string'' in C is a buffer with a known length.
|
Another type of string-like data in C is a buffer with a known length.
|
||||||
When buffers are used, usually another argument is passed to the function which indicates the length of the buffer.
|
When buffers are used, usually another argument is passed to the function which indicates the length of the buffer.
|
||||||
This fact may be used to print out the contents of the buffer in the same way as normal C strings.
|
This fact may be used to print out the contents of the buffer in the same way as normal C strings.
|
||||||
|
|
||||||
@@ -293,7 +290,7 @@ Example: \texttt{write(3, 0x1234:"Test\textbackslash{}x00ABC", 8)}.
|
|||||||
|
|
||||||
\subsection{Flags}\label{subsec:retrieving-flags}
|
\subsection{Flags}\label{subsec:retrieving-flags}
|
||||||
|
|
||||||
Some functions have one of their arguments dedicated to flags which may be combined by bitwise XOR.
|
Some functions have one of their arguments dedicated to flags which may be combined by bitwise XOR\@.
|
||||||
These arguments are also of type integer.
|
These arguments are also of type integer.
|
||||||
To distinguish flag arguments from others, a pipe symbol (\texttt{|}) is used after the colon and between the flags.
|
To distinguish flag arguments from others, a pipe symbol (\texttt{|}) is used after the colon and between the flags.
|
||||||
|
|
||||||
@@ -301,10 +298,10 @@ Example: \texttt{open(0x1234:"test.txt", 0102:|O\_CREAT|O\_RDWR|, 0644)}.
|
|||||||
|
|
||||||
\subsection{Constants}\label{subsec:retrieving-constants}
|
\subsection{Constants}\label{subsec:retrieving-constants}
|
||||||
|
|
||||||
For some functions constants are used.
|
For some functions, constants are used.
|
||||||
These constants are typically used C macros in the source code.
|
These constants are typically implemented as C macros (\texttt{\#define}) in the source code.
|
||||||
This makes the source code more readable (and portable).
|
This makes the source code more readable (and portable).
|
||||||
Constants are represented as an integer again followed by a colon, this time without any special characters to disdinguish them from other types.
|
Constants are represented as an integer, again followed by a colon, this time without any special characters to distinguish them from other types.
|
||||||
|
|
||||||
Example: \texttt{socket(2:AF\_INET, 1:SOCK\_STREAM, 6)}.
|
Example: \texttt{socket(2:AF\_INET, 1:SOCK\_STREAM, 6)}.
|
||||||
|
|
||||||
@@ -320,7 +317,7 @@ Example: \\
|
|||||||
|
|
||||||
\subsection{Pointers to Structures}\label{subsec:retrieving-pointers-to-structures}
|
\subsection{Pointers to Structures}\label{subsec:retrieving-pointers-to-structures}
|
||||||
|
|
||||||
In rare cases structures (\texttt{struct}) are used as argument types.
|
In rare cases, structures (\texttt{struct}) are used as argument types.
|
||||||
Two curly brackets (\texttt{\{\}}) are used to indicate structures.
|
Two curly brackets (\texttt{\{\}}) are used to indicate structures.
|
||||||
Then the field names are displayed plainly, followed by a colon and then the value of that field.
|
Then the field names are displayed plainly, followed by a colon and then the value of that field.
|
||||||
Commas are used to separate the fields respectively.
|
Commas are used to separate the fields respectively.
|
||||||
@@ -339,6 +336,10 @@ Example (\texttt{malloc}): \\
|
|||||||
\texttt{return 0x1234; errno 0}, \\
|
\texttt{return 0x1234; errno 0}, \\
|
||||||
\texttt{return -1; errno ENOMEM}.
|
\texttt{return -1; errno ENOMEM}.
|
||||||
|
|
||||||
|
Some libc functions return their results via a pointer, which was previously given to them as an argument.
|
||||||
|
The \texttt{pipe} function is called with an \texttt{int} array of size two as an argument and stores its two pipe ends into this array.
|
||||||
|
The \texttt{read} function is called with a pointer to a buffer and a corresponding size and stores its read data into this buffer.
|
||||||
|
|
||||||
Example (\texttt{pipe}): \\
|
Example (\texttt{pipe}): \\
|
||||||
\texttt{return 0; errno 0; fildes=[3,4]}, \\
|
\texttt{return 0; errno 0; fildes=[3,4]}, \\
|
||||||
\texttt{return -1; errno ENFILE}.
|
\texttt{return -1; errno ENFILE}.
|
||||||
@@ -348,12 +349,13 @@ Example (\texttt{read}): \\
|
|||||||
\texttt{return -1; errno EINTR}.
|
\texttt{return -1; errno EINTR}.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
\section{Determining Function Call Location}\label{sec:determining-function-call-location}
|
\section{Determining Function Call Location}\label{sec:determining-function-call-location}
|
||||||
|
|
||||||
Besides from argument values and return values, it would be interesting to know from where inside the intercepted program the function call came from.
|
Besides argument values and return values, it would be interesting to know from where inside the intercepted program the function call came.
|
||||||
At first this seems quite impossible.
|
At first this seems quite impossible.
|
||||||
But a function always knows at least the return address, the address to set then instruction pointer to when the function finishes.
|
But a function always knows at least the return address, the address to set the instruction pointer to when the function finishes.
|
||||||
With this information it may be estimated where the call to the current function came from.
|
With this information, it may be estimated where the call to the current function came from.
|
||||||
|
|
||||||
\subsection{Return Address and Relative Position}\label{subsec:return-address-and-relative-position}
|
\subsection{Return Address and Relative Position}\label{subsec:return-address-and-relative-position}
|
||||||
|
|
||||||
@@ -405,11 +407,11 @@ typedef struct {
|
|||||||
\end{description}
|
\end{description}
|
||||||
\end{quote}
|
\end{quote}
|
||||||
|
|
||||||
Using information from \texttt{Dl\_info}, it is possible to exactly determine the (shared) object from where the call came from (\texttt{dli\_fname}).
|
Using information from \texttt{Dl\_info}, it is possible to exactly determine the (shared) object where the call came from (\texttt{dli\_fname}).
|
||||||
Furthermore, it is possible to calculate the relative position inside this (shared) object using \texttt{dli\_fbase} and the return address itself.
|
Furthermore, it is possible to calculate the relative position inside this (shared) object using \texttt{dli\_fbase} and the return address itself.
|
||||||
Keep in mind that the return address may only be used as an estimation for the origin of the call.
|
Keep in mind that the return address may only be used as an estimation for the origin of the call.
|
||||||
Especially heavily optimized programs might use the same return address for functions in different code paths.
|
Especially heavily optimized programs might use the same return address for functions in different code paths.
|
||||||
Optionally, a name of a ``symbol'' (function) may be retrieved from where the function call came from.
|
Optionally, a name of a ``symbol'' (function) may be retrieved, indicating where the function call came from.
|
||||||
|
|
||||||
|
|
||||||
\subsection{Source File and Line Number}\label{subsec:source-file-and-line-number}
|
\subsection{Source File and Line Number}\label{subsec:source-file-and-line-number}
|
||||||
@@ -462,7 +464,7 @@ These other environment variables are described in the following:
|
|||||||
It is a list separated by commas, colons, or semicolons.
|
It is a list separated by commas, colons, or semicolons.
|
||||||
Wildcards (\texttt{*}) at the end of function names are possible.
|
Wildcards (\texttt{*}) at the end of function names are possible.
|
||||||
A prefix of \texttt{-} indicates that the following function should not be intercepted.
|
A prefix of \texttt{-} indicates that the following function should not be intercepted.
|
||||||
Example: \texttt{*,-sem\_} intercepts all functions except those which start with \texttt{sem\_}.
|
Example: \texttt{*,-sem\_*} intercepts all functions except those which start with \texttt{sem\_}.
|
||||||
By default, all (implemented) functions are intercepted.
|
By default, all (implemented) functions are intercepted.
|
||||||
\item[\texttt{INTERCEPT\_LIBRARIES}]
|
\item[\texttt{INTERCEPT\_LIBRARIES}]
|
||||||
This variable is used to specify which libraries' function calls should be intercepted.
|
This variable is used to specify which libraries' function calls should be intercepted.
|
||||||
@@ -486,7 +488,7 @@ The shared object currently supports intercepting the following functions:
|
|||||||
|
|
||||||
\section{\texttt{intercept} Command}\label{sec:intercept-command}
|
\section{\texttt{intercept} Command}\label{sec:intercept-command}
|
||||||
|
|
||||||
To make the usage of the aforementioned shared object more easy, a simple python script has been put together.
|
To make the usage of the aforementioned shared object easier, a simple python script has been put together.
|
||||||
This script may be used as a command line tool.
|
This script may be used as a command line tool.
|
||||||
See Listing~\ref{lst:intercept}.
|
See Listing~\ref{lst:intercept}.
|
||||||
|
|
||||||
@@ -544,25 +546,57 @@ This includes the offset relative to the calling binary and a source file and li
|
|||||||
|
|
||||||
\begin{listing}[htbp]
|
\begin{listing}[htbp]
|
||||||
\inputminted[fontsize=\tiny]{text}{src/listings/intercept-client.txt}
|
\inputminted[fontsize=\tiny]{text}{src/listings/intercept-client.txt}
|
||||||
\caption{Recoreded function calls from \texttt{./client}.}
|
\caption{Recorded function calls from \texttt{./client}.}
|
||||||
\label{lst:intercept-client}
|
\label{lst:intercept-client}
|
||||||
\end{listing}
|
\end{listing}
|
||||||
|
|
||||||
|
|
||||||
\section{Automated Testing on Intercepted Function Calls}\label{sec:automated-testing-on-intercepted-function-calls}
|
\section{Automated Testing on Intercepted Function Calls}\label{sec:automated-testing-on-intercepted-function-calls}
|
||||||
|
|
||||||
The recorded function calls of a program run now may be used to perform checks and tests on them.
|
The recorded function calls of a program run may now be used to perform checks and tests on them.
|
||||||
It is trivially possible to check which functions were called and in what order.
|
It is trivially possible to check which functions were called and in what order.
|
||||||
Furthermore, it is possible to check various pre- and post-conditions for each function call.
|
Furthermore, it is possible to check various pre- and post-conditions for each function call.
|
||||||
This is beneficial because many library functions in C rely on these pre- and post-conditions, which are not enforced by the compiler or in any other way.
|
This is beneficial because many library functions in C rely on these pre- and post-conditions, which are not enforced by the compiler or in any other way.
|
||||||
|
|
||||||
For example, the \texttt{malloc} function has the post-condition that the returned value later needs to be passed to \texttt{free} to avoid memory leaks.
|
For example, the \texttt{malloc} function has the post-condition that the returned value later needs to be passed to \texttt{free} to avoid memory leaks.
|
||||||
The \texttt{free} function, on the other hand, has the pre-condition that the passed value was previously acquired using \texttt{malloc} and may not be yet free'd.
|
The \texttt{free} function, on the other hand, has the pre-condition that the passed value was previously acquired using \texttt{malloc} and may not be yet freed.
|
||||||
Any violation of such pre- and post-conditions may be reported as incompliant behavior.
|
Any violation of such pre- and post-conditions may be reported as non-compliant behavior.
|
||||||
\cite{malloc.3}
|
\cite{malloc.3}
|
||||||
|
|
||||||
This means that intercepted function calls allow a tester to check if programmers use library function in compliance to their specification.
|
This means that intercepted function calls allow a tester to check whether programmers use library functions in compliance with their specifications.
|
||||||
Other checks may also include guards to calls to ``forbidden'' functions, or that specific functions must be called exactly three times.
|
Other checks may also include guards to calls to ``forbidden'' functions, or that specific functions must be called exactly three times.
|
||||||
Another important post-condition of most library functions is the return value, which in most cases indicates success or failure of an operation.
|
Another important post-condition of most library functions is the return value, which in most cases indicates success or failure of an operation.
|
||||||
However, intercepting of calls alone may not be able to verify if a program really checks the return value of a function and acts accordingly.
|
However, intercepting of calls alone may not be able to verify if a program really checks the return value of a function and acts accordingly.
|
||||||
Chapter~\ref{ch:manipulating-function-calls} shows how this problem may be solved.
|
Chapter~\ref{ch:manipulating-function-calls} shows how this problem may be solved.
|
||||||
|
|
||||||
|
|
||||||
|
\subsection{Validating Memory Management}\label{subsec:testing-memory-management}
|
||||||
|
|
||||||
|
The most basic memory management functions in the C standard library are the following.
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\texttt{malloc}, \texttt{calloc}]
|
||||||
|
Allocate memory. \cite{malloc.3}
|
||||||
|
\item[\texttt{realloc}, \texttt{reallocarray}]
|
||||||
|
Change the size of a previously allocated memory block and possibly move the block to another position in virtual memory. \cite{malloc.3}
|
||||||
|
\item[\texttt{free}]
|
||||||
|
Free previously allocated memory. \cite{malloc.3}
|
||||||
|
\item[\texttt{getaddrinfo}]
|
||||||
|
Allocate and initialize a linked list of \texttt{addrinfo} structures. \cite{getaddrinfo.3}
|
||||||
|
\item[\texttt{freeaddrinfo}]
|
||||||
|
Frees memory previously allocated by \texttt{getaddrinfo} for the dynamically allocated linked list. \cite{getaddrinfo.3}
|
||||||
|
\item[\texttt{getline}, \texttt{getdelim}]
|
||||||
|
Used to split strings.
|
||||||
|
Allocate memory on their own, which must be freed afterward. \cite{getline.3}
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
By only intercepting these functions, it is possible to check if all allocated memory blocks in a simple program were properly allocated and freed.
|
||||||
|
|
||||||
|
|
||||||
|
\subsection{Validating Resource Management}\label{subsec:validating-resource-management}
|
||||||
|
|
||||||
|
In addition to memory management, the proper use of other resources---most notably file descriptors---can also be checked.
|
||||||
|
Many functions in the C standard library rely on file descriptors.
|
||||||
|
It may be checked if file descriptors were properly acquired, if only previously acquired file descriptors are used, and if these file descriptors are closed after their use.
|
||||||
|
Relevant for this work are also semaphores because they do not rely on file descriptor in their API\@.
|
||||||
|
Due to time restrictions, no detailed list for validating resource management has been put together.
|
||||||
@@ -1,104 +0,0 @@
|
|||||||
|
|
||||||
\chapter{Manipulating Function Calls}\label{ch:manipulating-function-calls}
|
|
||||||
|
|
||||||
This chapter discusses how to manipulate function calls and how this may be used to test programs.
|
|
||||||
For how function calls may be intercepted at all, see Chapter~\ref{ch:intercepting-function-calls}.
|
|
||||||
This chapter builds on the basis of the previous one and expands its functions.
|
|
||||||
``Manipulation'' in this context means to change the arguments of a function then running it normally, or skipping the execution of the real function completely and simply returning a given value (``mocking'').
|
|
||||||
These techniques allow in-depth testing of programs.
|
|
||||||
|
|
||||||
In contrast to simply recording and logging function calls which may be controlled via environment variables, manipulation of such function calls requires some other process to indicate how to handle each call.
|
|
||||||
This work uses simple sockets to communicate between the process of the program to be tested and a ``server'' which decides what action to perform for each function call.
|
|
||||||
Currently, only communication over Unix sockets is implemented, but communication over TCP sockets is also easily possible.
|
|
||||||
|
|
||||||
Figure~\ref{fig:control-flow} illustrates the control flow for manipulating function calls.
|
|
||||||
|
|
||||||
\begin{figure}
|
|
||||||
\begin{sequencediagram}
|
|
||||||
\newthread{p}{:Program}
|
|
||||||
\newinst{l}{:\texttt{\textit{lib}.so}}
|
|
||||||
\newinst{i}{:\texttt{intercept.so}}
|
|
||||||
\newthreadShift[gray]{s}{:Server}{2cm}
|
|
||||||
|
|
||||||
%\begin{sdblock}{Normal Call}{}
|
|
||||||
% \begin{call}{p}{read()}{l}{return a}
|
|
||||||
% \end{call}
|
|
||||||
%\end{sdblock}
|
|
||||||
|
|
||||||
\begin{sdblock}{Intercepted Call}{}
|
|
||||||
\begin{call}{p}{malloc(x)}{i}{return a}
|
|
||||||
\mess{i}{{``malloc(x)''}}{s}
|
|
||||||
\mess{s}{``ok''}{i}
|
|
||||||
\begin{call}{i}{malloc(x)}{l}{return a}
|
|
||||||
\end{call}
|
|
||||||
\mess{i}{``return a''}{s}
|
|
||||||
\end{call}
|
|
||||||
\end{sdblock}
|
|
||||||
|
|
||||||
\begin{sdblock}{Manipulated Call}{}
|
|
||||||
\begin{call}{p}{malloc(x)}{i}{return a}
|
|
||||||
\mess{i}{{``malloc(x)''}}{s}
|
|
||||||
\mess{s}{``modify y''}{i}
|
|
||||||
\begin{call}{i}{malloc(y)}{l}{return a}
|
|
||||||
\end{call}
|
|
||||||
\mess{i}{``return a''}{s}
|
|
||||||
\end{call}
|
|
||||||
\end{sdblock}
|
|
||||||
|
|
||||||
\begin{sdblock}{Mocked Call}{}
|
|
||||||
\begin{call}{p}{malloc(x)}{i}{return z}
|
|
||||||
\mess{i}{{``malloc(x)''}}{s}
|
|
||||||
\mess{s}{``fail'' / ``return z''}{i}
|
|
||||||
\mess{i}{``return z''}{s}
|
|
||||||
\end{call}
|
|
||||||
\end{sdblock}
|
|
||||||
\end{sequencediagram}
|
|
||||||
\centering
|
|
||||||
\caption{Simplified Control Flow for Function Call Manipulation.}
|
|
||||||
\label{fig:control-flow}
|
|
||||||
\end{figure}
|
|
||||||
|
|
||||||
|
|
||||||
\section{Defining a Protocol}\label{sec:defining-a-protocol}
|
|
||||||
|
|
||||||
When using a socket to communicate with another process, a protocol definition is needed.
|
|
||||||
This works defines a text-based protocol in which line breaks denote the end of a message.
|
|
||||||
The following subsections describe the defined message types.
|
|
||||||
|
|
||||||
\subsection{\textit{Init} Message (Client \textrightarrow{} Server)}\label{subsec:init-message}
|
|
||||||
|
|
||||||
This message is the first message sent in a newly established connection.
|
|
||||||
The client (\texttt{intercept.so}) uses it to identify the running program to the server (PID, path, \dots).
|
|
||||||
|
|
||||||
\subsection{\textit{Call} Message (Client \textrightarrow{} Server)}\label{subsec:call-message}
|
|
||||||
|
|
||||||
For each function call the client sends this message to the server and waits for a reply (\textit{Action} message).
|
|
||||||
The contents of this message type correspond to the first line of an intercepted function call (see Section~\ref{sec:automated-testing-on-intercepted-function-calls}).
|
|
||||||
|
|
||||||
\subsection{\textit{Action} Message (Server \textrightarrow{} Client)}\label{subsec:action-message}
|
|
||||||
|
|
||||||
After receiving a \textit{Call} message from the client, the server decides what the client should do with this call.
|
|
||||||
The server responds in one of four possible ways:
|
|
||||||
|
|
||||||
\begin{description}
|
|
||||||
\item[\texttt{"ok"}] indicates that the function should be called normally.
|
|
||||||
\item[\texttt{"modify \textit{ARG...}"}] indicates that the arguments of the function should be changed according to the message before the call to the function.
|
|
||||||
\item[\texttt{"fail \textit{ERROR}"}] indicates that the function should not be called and instead should fail with the given error code.
|
|
||||||
\item[\texttt{"return \textit{VALUE}"}] indicates that the function should simply return the provided value without calling the real function.
|
|
||||||
\end{description}
|
|
||||||
|
|
||||||
\subsection{\textit{Return} Message (Client \textrightarrow{} Server)}\label{subsec:return-message}
|
|
||||||
|
|
||||||
This message informs the server about the resulting return value.
|
|
||||||
The server does not acknowledge this message.
|
|
||||||
The contents of this message type correspond the second line of an intercepted function call (see Section~\ref{sec:automated-testing-on-intercepted-function-calls}).
|
|
||||||
|
|
||||||
|
|
||||||
\section{Creating a Socket Server in Python}\label{sec:creating-a-socket-server-in-python}
|
|
||||||
|
|
||||||
Lorem Ipsum.
|
|
||||||
|
|
||||||
|
|
||||||
\section{Automated Testing using Function Call Manipulation}\label{sec:automated-testing-using-function-call-manipulation}
|
|
||||||
|
|
||||||
Lorem Ipsum.
|
|
||||||
184
thesis/src/04.manipulate.tex
Normal file
184
thesis/src/04.manipulate.tex
Normal file
@@ -0,0 +1,184 @@
|
|||||||
|
|
||||||
|
\chapter{Manipulating Function Calls}\label{ch:manipulating-function-calls}
|
||||||
|
|
||||||
|
This chapter discusses how to manipulate function calls and how this may be used to test programs.
|
||||||
|
How function calls may be intercepted at all has been discussed in Chapter~\ref{ch:intercepting-function-calls}.
|
||||||
|
This chapter builds on the basis of the previous one and expands its functions.
|
||||||
|
In this context, ``manipulation'' means changing the arguments of a function before calling it with the modified arguments, or skipping the execution of the real function completely and simply returning a given value (``mocking'').
|
||||||
|
These techniques allow in-depth testing of programs.
|
||||||
|
|
||||||
|
In contrast to simply recording and logging function calls, which may be controlled via environment variables, manipulation of such function calls requires some other process to indicate how to handle each call.
|
||||||
|
This work uses simple Unix domain sockets to communicate between the process of the program to be tested, and a ``server'', which decides what action to perform for each function call.
|
||||||
|
Currently, only communication over Unix domain sockets is implemented, but communication over TCP sockets is also easily possible.
|
||||||
|
This approach is similar to the one used in \cite{ostia} to communicate with the \textit{agent}.
|
||||||
|
|
||||||
|
Figure~\ref{fig:control-flow} illustrates the control flow for manipulating function calls.
|
||||||
|
|
||||||
|
\begin{figure}
|
||||||
|
\begin{sequencediagram}
|
||||||
|
\newthread{p}{:Program}
|
||||||
|
\newinst{l}{:\texttt{\textit{lib}.so}}
|
||||||
|
\newinst{i}{:\texttt{intercept.so}}
|
||||||
|
\newthreadShift[gray]{s}{:Server}{2cm}
|
||||||
|
|
||||||
|
%\begin{sdblock}{Normal Call}{}
|
||||||
|
% \begin{call}{p}{read()}{l}{return a}
|
||||||
|
% \end{call}
|
||||||
|
%\end{sdblock}
|
||||||
|
|
||||||
|
\begin{sdblock}{Intercepted Call}{}
|
||||||
|
\begin{call}{p}{malloc(x)}{i}{return a}
|
||||||
|
\mess{i}{{``malloc(x)''}}{s}
|
||||||
|
\mess{s}{``ok''}{i}
|
||||||
|
\begin{call}{i}{malloc(x)}{l}{return a}
|
||||||
|
\end{call}
|
||||||
|
\mess{i}{``return a''}{s}
|
||||||
|
\end{call}
|
||||||
|
\end{sdblock}
|
||||||
|
|
||||||
|
\begin{sdblock}{Modified Call}{}
|
||||||
|
\begin{call}{p}{malloc(x)}{i}{return b}
|
||||||
|
\mess{i}{{``malloc(x)''}}{s}
|
||||||
|
\mess{s}{``modify y''}{i}
|
||||||
|
\begin{call}{i}{malloc(y)}{l}{return b}
|
||||||
|
\end{call}
|
||||||
|
\mess{i}{``return b''}{s}
|
||||||
|
\end{call}
|
||||||
|
\end{sdblock}
|
||||||
|
|
||||||
|
\begin{sdblock}{Mocked Call}{}
|
||||||
|
\begin{call}{p}{malloc(x)}{i}{return c}
|
||||||
|
\mess{i}{{``malloc(x)''}}{s}
|
||||||
|
\mess{s}{``fail'' / ``return c''}{i}
|
||||||
|
\mess{i}{``return c''}{s}
|
||||||
|
\end{call}
|
||||||
|
\end{sdblock}
|
||||||
|
\end{sequencediagram}
|
||||||
|
\centering
|
||||||
|
\caption{Simplified Control Flow for Function Call Manipulation.}
|
||||||
|
\label{fig:control-flow}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
|
||||||
|
\section{Defining a Protocol}\label{sec:defining-a-protocol}
|
||||||
|
|
||||||
|
When using a socket to communicate with another process, a protocol definition is needed.
|
||||||
|
This work defines a text-based protocol in which line breaks denote the end of a message.
|
||||||
|
The following subsections describe the defined message types.
|
||||||
|
|
||||||
|
\subsection{\textit{Init} Message (Client \textrightarrow{} Server)}\label{subsec:init-message}
|
||||||
|
|
||||||
|
This message is the first message sent in a newly established connection.
|
||||||
|
The client (\texttt{intercept.so}) uses it to identify the running program to the server (PID, path, \dots).
|
||||||
|
|
||||||
|
\subsection{\textit{Call} Message (Client \textrightarrow{} Server)}\label{subsec:call-message}
|
||||||
|
|
||||||
|
For each function call, the client sends this message to the server and waits for a reply (\textit{Action} message).
|
||||||
|
The contents of this message type correspond to the first line of an intercepted function call (see Section~\ref{sec:automated-testing-on-intercepted-function-calls}).
|
||||||
|
|
||||||
|
\subsection{\textit{Action} Message (Server \textrightarrow{} Client)}\label{subsec:action-message}
|
||||||
|
|
||||||
|
After receiving a \textit{Call} message from the client, the server decides what the client should do with this call.
|
||||||
|
The server responds in one of four possible ways:
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\texttt{"ok"}] indicates that the function should be called normally.
|
||||||
|
\item[\texttt{"modify \textit{ARG...}"}] indicates that the arguments of the function should be changed according to the message before the call to the function.
|
||||||
|
\item[\texttt{"fail \textit{ERROR}"}] indicates that the function should not be called and instead should fail with the given error code.
|
||||||
|
\item[\texttt{"return \textit{VALUE}"}] indicates that the function should simply return the provided value without calling the real function.
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
\subsection{\textit{Return} Message (Client \textrightarrow{} Server)}\label{subsec:return-message}
|
||||||
|
|
||||||
|
This message informs the server about the resulting return value.
|
||||||
|
The server does not acknowledge this message.
|
||||||
|
The contents of this message type correspond to the second line of an intercepted function call (see Section~\ref{sec:automated-testing-on-intercepted-function-calls}).
|
||||||
|
|
||||||
|
|
||||||
|
\section{Automated Testing using Function Call Manipulation}\label{sec:automated-testing-using-function-call-manipulation}
|
||||||
|
|
||||||
|
As seen in Figure~\ref{fig:control-flow} function call manipulation allows for mocking individual calls.
|
||||||
|
Mocking may be used to see how the program behaves when individual calls to a function fail, or return an unusual, but valid, value.
|
||||||
|
The simplest way to automatically test programs is to run them multiple times, allowing a single function call to fail in each run.
|
||||||
|
The resulting sequence of function calls now may be put together to a call sequence graph (or tree).
|
||||||
|
By analyzing this call graph, it is possible to decide if a program correctly terminated, when faced with a failed function call.
|
||||||
|
This may be the case when the following function calls differ from those which were recorded on a default run (without any mocked function calls).
|
||||||
|
|
||||||
|
|
||||||
|
\subsection{Testing Return Value Checks}\label{subsec:testing-return-value-checks}
|
||||||
|
|
||||||
|
Figure~\ref{fig:call-sequence} shows the simplified and collapsed call sequence graph of the prior example in Section~\ref{sec:intercepting-example}.
|
||||||
|
Each edge between two nodes without any label indicates the next function call on a normal run of the program.
|
||||||
|
Edges labeled with ``fail'' indicate the next function call after a mocked failed call.
|
||||||
|
In reality, there are multiple failing paths, one for each possible error return value.
|
||||||
|
However, in this example they all yield the same resulting path, and have therefore been collapsed.
|
||||||
|
|
||||||
|
To test if a programmer always checked the return value of a function and acted accordingly, this resulting call sequence graph now may be analyzed.
|
||||||
|
At first glance, this test appears trivial.
|
||||||
|
The simplest approach is to verify that after a failing function call only ``cleanup'' function calls (\texttt{free}, \texttt{close}, \texttt{exit}, \dots) follow.
|
||||||
|
For simple programs, this assumption may hold, but there are many exceptions.
|
||||||
|
For example, what if the program recognizes the failed call correctly as failed but recovers and continues to operate normally?
|
||||||
|
Or what if the ``cleanup'' path is very complex and includes function calls not priorly marked as valid cleanup functions?
|
||||||
|
However, for simple programs (like those mentioned in Section~\ref{sec:motivation-and-goal}), the simplest approach from above suffices.
|
||||||
|
|
||||||
|
\begin{figure}
|
||||||
|
\begin{tikzpicture}[node distance=15mm, thick, main/.style = {draw, circle}, text centered]
|
||||||
|
\newcommand{\fncall}[2]{\tiny{\begin{tabular}{c}\normalsize{\texttt{#1}}\\\texttt{#2}\end{tabular}}}
|
||||||
|
\node[main] (1)[elips] {\fncall{getopt}{client+0x1ac5, client.c:186}};
|
||||||
|
\node[main] (2)[elips] [below of=1] {\fncall{getaddrinfo}{client+0x147b, client.c:74}};
|
||||||
|
\node[main] (3)[elips] [below of=2] {\fncall{socket}{client+0x14f2, client.c:81}};
|
||||||
|
\node[main] (4)[elips] [below of=3] {\fncall{connect}{client+0x15f3, client.c:104}};
|
||||||
|
\node[main] (5)[elips] [below of=4] {\fncall{freeaddrinfo}{client+0x1638, client.c:114}};
|
||||||
|
\node[main] (6)[elips] [below of=5] {\fncall{send}{client+0x1f5c, client.c:277}};
|
||||||
|
\node[main] (7)[elips] [below of=6] {\fncall{recv}{client+0x1fa1, client.c:284}};
|
||||||
|
\node[main] (8)[elips] [below of=7] {\fncall{recv}{client+0x2062, client.c:300}};
|
||||||
|
\node[main] (9)[elips] [below of=8] {\fncall{recv}{client+0x2442, client.c:360}};
|
||||||
|
\node[main] (10)[elips] [below of=9] {\fncall{recv}{client+0x2442, client.c:360}};
|
||||||
|
\node[main] (11)[elips] [below of=10] {\fncall{close}{client+0x2489, client.c:375}};
|
||||||
|
\node[main] (12)[elips] [below of=11] {\fncall{exit}{sys+0x0}};
|
||||||
|
|
||||||
|
\node[main] (2f1)[elips] [right=10mm of 2] {\fncall{exit}{sys+0x0}};
|
||||||
|
\node[main] (3f1)[elips] [right=10mm of 3] {\fncall{freeaddrinfo}{client+0x1638, client.c:114}};
|
||||||
|
\node[main] (4f1)[elips] [right=10mm of 4] {\fncall{close}{client+0x1611, client.c:106}};
|
||||||
|
|
||||||
|
\draw[->] (1) -- (2);
|
||||||
|
\draw[->] (2) -- (3);
|
||||||
|
\draw[->] (2) -- node[midway, above, sloped, pos=0.5] {fail} (2f1);
|
||||||
|
\draw[->] (3) -- (4);
|
||||||
|
\draw[->] (3) -- node[midway, above, sloped, pos=0.5] {fail} (3f1);
|
||||||
|
\draw[->] (3f1) -- (2f1);
|
||||||
|
\draw[->] (4) -- (5);
|
||||||
|
\draw[->] (4) -- node[midway, above, sloped, pos=0.5] {fail} (4f1);
|
||||||
|
\draw[->] (4f1) -- (3f1);
|
||||||
|
\draw[->] (5) -- (6);
|
||||||
|
\draw[->] (6) -- (7);
|
||||||
|
\draw[->] (7) -- (8);
|
||||||
|
\draw[->] (8) -- (9);
|
||||||
|
\draw[->] (9) -- (10);
|
||||||
|
\draw[->] (10) -- (11);
|
||||||
|
\draw[->] (11) -- (12);
|
||||||
|
\draw[->] (6) to [out=0,in=-4,looseness=2] node[midway, above, pos=0.05] {fail} (11);
|
||||||
|
\draw[->] (7) to [out=0,in=-2,looseness=1.75] node[midway, above, pos=0.075] {fail} (11);
|
||||||
|
\draw[->] (8) to [out=0,in=0,looseness=1.5] node[midway, above, pos=0.1] {fail} (11);
|
||||||
|
\draw[->] (9) to [out=0,in=2,looseness=1.25] node[midway, above, pos=0.1] {fail} (11);
|
||||||
|
\draw[->] (10) to [out=0,in=3,looseness=1] node[midway, above, pos=0.1] {fail} (11);
|
||||||
|
\end{tikzpicture}
|
||||||
|
\centering
|
||||||
|
\caption{Simplified Call Sequence Graph of \texttt{./client}.}
|
||||||
|
\label{fig:call-sequence}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
|
||||||
|
\subsection{Testing Correct Handling of Interrupts}\label{subsec:testing-interrupts}
|
||||||
|
|
||||||
|
Many functions (like \texttt{read}, \texttt{write}, or \texttt{sem\_wait}) are interruptable by signals.
|
||||||
|
When this happens, they return a value indicating an error and set \texttt{errno} to \texttt{EINTR}.
|
||||||
|
Usually, the program is expected to repeat the call until it gets a real return value or error other than \texttt{EINTR}.
|
||||||
|
Therefore, testing correct handling of interrupts is a different type of test in contrast to general tests on return value checks as seen in Subsection~\ref{subsec:testing-return-value-checks}.
|
||||||
|
|
||||||
|
It is relatively simple to test if a program correctly handles interrupts.
|
||||||
|
On any function call that may yield \texttt{EINTR} mock the call and return exactly that error.
|
||||||
|
Afterward, check if the same function is called again.
|
||||||
|
To increase confidence in the result, one may repeat this process multiple times.
|
||||||
|
As in the test in Subsection~\ref{subsec:testing-return-value-checks}, the handling of the interrupt may involve calls to other functions, so this method is not always the right choice.
|
||||||
|
But for simple programs, it totally suffices.
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
|
|
||||||
\chapter{Related Work}\label{ch:related-work}
|
|
||||||
|
|
||||||
Lorem Ipsum.
|
|
||||||
|
|
||||||
What other solutions are available?
|
|
||||||
What are the differences?
|
|
||||||
What are the characteristics?
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
|
|
||||||
\chapter{Conclusion}\label{ch:conclusion}
|
|
||||||
|
|
||||||
Lorem Ipsum.
|
|
||||||
|
|
||||||
Perhaps do some study/``research'' on performance (CPU/memory/\dots).
|
|
||||||
232
thesis/src/05.evaluation.tex
Normal file
232
thesis/src/05.evaluation.tex
Normal file
@@ -0,0 +1,232 @@
|
|||||||
|
|
||||||
|
\chapter{Evaluation}\label{ch:evaluation}
|
||||||
|
|
||||||
|
This chapter evaluates the developed approach in terms of both its practical usefulness and its performance.
|
||||||
|
Section~\ref{sec:usefulness} examines how well the library and tools support automated testing in the context of the Operating Systems course.
|
||||||
|
Section~\ref{sec:performance} analyzes the performance overhead introduced by intercepting function calls.
|
||||||
|
|
||||||
|
|
||||||
|
\section{Usefulness for the Operating Systems Course}\label{sec:usefulness}
|
||||||
|
|
||||||
|
Up until recently the Operating Systems course (mentioned in Section~\ref{sec:motivation-and-goal}) was split into three exercise blocks:
|
||||||
|
Files, Shared Memory, Semaphores; Related Processes and Inter-Process Communication via Unnamed Pipes; and Sockets.
|
||||||
|
Table~\ref{tab:functions} lists all functions presented in the course and their implementation status in \texttt{intercept.so}.
|
||||||
|
As one may see, simple file stream functions are not currently implemented in \texttt{intercept.so}.
|
||||||
|
This is because of time restrictions on this work, and the fact that simple file operations may be tested easily in the conventional way of checking the resulting output.
|
||||||
|
Note that the future implementation of single functions is not very complex.
|
||||||
|
All other functions have at least interception and mocking (returning, failing) implemented.
|
||||||
|
For some functions the modification of function arguments has been implemented.
|
||||||
|
|
||||||
|
\begin{table}[h!]
|
||||||
|
\centering
|
||||||
|
\begin{threeparttable}
|
||||||
|
\begin{tabular}{ c|l|c }
|
||||||
|
Ex. Block & Functions & Implementation \\
|
||||||
|
\hline
|
||||||
|
- & malloc, calloc, realloc, reallocarray, free & \texttt{icmrf} \\
|
||||||
|
- & getopt & \texttt{ic-rf} \\
|
||||||
|
- & sigaction & \texttt{ic-{}-f} \\
|
||||||
|
- & mmap & \texttt{ic-rf} \\
|
||||||
|
- & munmap & \texttt{icmrf} \\
|
||||||
|
- & close & \texttt{icmrf} \\
|
||||||
|
\hline
|
||||||
|
1 & open, fopen, fdopen & \texttt{-{}-{}-{}-{}-} \\
|
||||||
|
1 & read, pread, write, pwrite & \texttt{ic-rf} \\
|
||||||
|
1 & fread, fgets, fgetc, fwrite, fputs, fputc, fprintf, fseek & \texttt{-{}-{}-{}-{}-} \\
|
||||||
|
1 & ferror, feof, clearerr, fileno, fflush, fclose & \texttt{-{}-{}-{}-{}-} \\
|
||||||
|
1 & getline, getdelim & \texttt{ic-rf} \\
|
||||||
|
1 & shm\_open, ftruncate, shm\_unlink & \texttt{icmrf} \\
|
||||||
|
1 & sem\_open, shm\_close, sem\_unlink & \texttt{icmrf} \\
|
||||||
|
1 & sem\_wait, sem\_post & \texttt{icmrf} \\
|
||||||
|
1 & sem\_trywait, sem\_timedwait & \texttt{icmrf} \\
|
||||||
|
1 & sem\_getvalue, sem\_destroy & \texttt{icmrf} \\
|
||||||
|
\hline
|
||||||
|
2 & fork, wait, waitpid & \texttt{icmrf} \\
|
||||||
|
2 & exec*, fexecve & \texttt{ic-rf} \\
|
||||||
|
2 & exit & \texttt{icm-{}-} \\
|
||||||
|
2 & pipe & \texttt{ic-rf} \\
|
||||||
|
2 & dup, dup2, dup3 & \texttt{icmrf} \\
|
||||||
|
\hline
|
||||||
|
3 & socket, bind, accept, connect & \texttt{ic-rf} \\
|
||||||
|
3 & listen & \texttt{icmrf} \\
|
||||||
|
3 & getaddrinfo & \texttt{ic-rf} \\
|
||||||
|
3 & freeaddrinfo & \texttt{icmrf} \\
|
||||||
|
3 & send, recv & \texttt{ic-rf} \\
|
||||||
|
3 & sendto, sendmsg, recvfrom, recvmsg & \texttt{ic-rf} \\
|
||||||
|
3 & setsockopt & \texttt{-{}-{}-{}-{}-} \\
|
||||||
|
\end{tabular}
|
||||||
|
\begin{tablenotes}
|
||||||
|
\item[\texttt{i}] Function may be intercepted.
|
||||||
|
\item[\texttt{c}] Complex function arguments or return value(s) are recorded fully.
|
||||||
|
\item[\texttt{m}] Function arguments may be modified.
|
||||||
|
\item[\texttt{r}] Function may be mocked using a specified return value.
|
||||||
|
\item[\texttt{f}] Function may be mocked using a specified error value.
|
||||||
|
\end{tablenotes}
|
||||||
|
\caption{List of relevant functions and their implementation status.}
|
||||||
|
\label{tab:functions}
|
||||||
|
\end{threeparttable}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
|
||||||
|
\section{Performance}\label{sec:performance}
|
||||||
|
|
||||||
|
Although high performance was not a primary goal of this work, the performance degradation caused by interception and manipulation should not be excessive.
|
||||||
|
The following two subsections test and discuss the performance degradation of \texttt{intercept.so} compared to running a program without any interception or hooking.
|
||||||
|
|
||||||
|
|
||||||
|
\subsection{Performance when Intercepting}\label{subsec:performance-intercepting}
|
||||||
|
|
||||||
|
To test the performance of \texttt{intercept.so}, the following measurement environment was set up.
|
||||||
|
On an x86-64 machine with an AMD Ryzen 7 7700X 8-Core processor, a simple program was called with an increasing number of iterations it had to perform.
|
||||||
|
The program simply called the \texttt{pipe} function and then closed the created pipes in a for loop.
|
||||||
|
At first execution time of the program was measured without using \texttt{intercept.so} (``Baseline'').
|
||||||
|
Then \texttt{intercept.so} was preloaded, but without any action to perform when intercepting (``Intercepting'').
|
||||||
|
After that, logging to \texttt{stderr} was enabled (``Logging to stderr'').
|
||||||
|
Finally, the logs were written to a file (``Logging to file'').
|
||||||
|
For each of the four variants, the program was called with an iteration count beginning at 100 and increasing in steps of 100 up to 5000.
|
||||||
|
Each measurement was taken 30 times, with one second between program executions to rule out statistical outliers.
|
||||||
|
Figure~\ref{fig:intercept-performance} illustrates the results.
|
||||||
|
|
||||||
|
It is clearly visible that the initialization step of \texttt{intercept.so} always takes around 10 ms.
|
||||||
|
In comparison to that, the performance degradation of the intercepting procedure alone is negligible, only around +13\% compared to the baseline execution (see ``Intercept -- 10 ms'' and ``Baseline'').
|
||||||
|
Most of the delay is caused by logging the recorded function calls.
|
||||||
|
|
||||||
|
\begin{figure}
|
||||||
|
\centering
|
||||||
|
\begin{tikzpicture}
|
||||||
|
\begin{axis}[
|
||||||
|
xmin=100, xmax=5000,
|
||||||
|
ymin=0, ymax=150,
|
||||||
|
scaled y ticks=false,
|
||||||
|
ymajorgrids=true,
|
||||||
|
grid style=dashed,
|
||||||
|
legend pos=north west,
|
||||||
|
legend cell align={left},
|
||||||
|
width=\textwidth,
|
||||||
|
xlabel=Iterations,
|
||||||
|
ylabel=Execution Time,
|
||||||
|
x unit=\#,
|
||||||
|
y unit=\si{\milli\second},
|
||||||
|
]
|
||||||
|
|
||||||
|
\addplot[color=blue] table [x=Cycles, y expr=\thisrow{Baseline Avg}/1000000, col sep=semicolon] {src/performance/stat.csv};
|
||||||
|
\addlegendentry{Baseline}
|
||||||
|
\addplot[name path=a_top,color=blue!50,forget plot] table [x=Cycles, y expr=(\thisrow{Baseline Avg} + \thisrow{Baseline SD}) / 1000000, col sep=semicolon] {src/performance/stat.csv};
|
||||||
|
\addplot[name path=a_down,color=blue!50,forget plot] table [x=Cycles, y expr=(\thisrow{Baseline Avg} - \thisrow{Baseline SD}) / 1000000, col sep=semicolon] {src/performance/stat.csv};
|
||||||
|
\addplot[blue!20,fill opacity=0.2] fill between[of=a_top and a_down];
|
||||||
|
\addlegendentry{Baseline ±SD}
|
||||||
|
|
||||||
|
\addplot[color=green] table [x=Cycles, y expr=\thisrow{Intercept Avg}/1000000, col sep=semicolon] {src/performance/stat.csv};
|
||||||
|
\addlegendentry{Intercepting}
|
||||||
|
\addplot[name path=b_top,color=green!50,forget plot] table [x=Cycles, y expr=(\thisrow{Intercept Avg} + \thisrow{Intercept SD}) / 1000000, col sep=semicolon] {src/performance/stat.csv};
|
||||||
|
\addplot[name path=b_down,color=green!50,forget plot] table [x=Cycles, y expr=(\thisrow{Intercept Avg} - \thisrow{Intercept SD}) / 1000000, col sep=semicolon] {src/performance/stat.csv};
|
||||||
|
\addplot[green!20,fill opacity=0.2] fill between[of=b_top and b_down];
|
||||||
|
\addlegendentry{Intercepting ±SD}
|
||||||
|
|
||||||
|
\addplot[color=teal] table [x=Cycles, y expr=(\thisrow{Intercept Avg} - 10000000) / 1000000, col sep=semicolon] {src/performance/stat.csv};
|
||||||
|
\addlegendentry{Intercepting -- 10 ms}
|
||||||
|
|
||||||
|
\addplot[color=red] table [x=Cycles, y expr=\thisrow{Stderr Avg}/1000000, col sep=semicolon] {src/performance/stat.csv};
|
||||||
|
\addlegendentry{Logging to stderr}
|
||||||
|
\addplot[name path=c_top,color=red!50,forget plot] table [x=Cycles, y expr=(\thisrow{Stderr Avg} + \thisrow{Stderr SD}) / 1000000, col sep=semicolon] {src/performance/stat.csv};
|
||||||
|
\addplot[name path=c_down,color=red!50,forget plot] table [x=Cycles, y expr=(\thisrow{Stderr Avg} - \thisrow{Stderr SD}) / 1000000, col sep=semicolon] {src/performance/stat.csv};
|
||||||
|
\addplot[red!20,fill opacity=0.2] fill between[of=c_top and c_down];
|
||||||
|
\addlegendentry{Logging to stderr ±SD}
|
||||||
|
|
||||||
|
\addplot[color=orange] table [x=Cycles, y expr=\thisrow{File Avg}/1000000, col sep=semicolon] {src/performance/stat.csv};
|
||||||
|
\addlegendentry{Logging to File}
|
||||||
|
\addplot[name path=d_top,color=orange!50,forget plot] table [x=Cycles, y expr=(\thisrow{File Avg} + \thisrow{File SD}) / 1000000, col sep=semicolon] {src/performance/stat.csv};
|
||||||
|
\addplot[name path=d_down,color=orange!50,forget plot] table [x=Cycles, y expr=(\thisrow{File Avg} - \thisrow{File SD}) / 1000000, col sep=semicolon] {src/performance/stat.csv};
|
||||||
|
\addplot[orange!20,fill opacity=0.2] fill between[of=d_top and d_down];
|
||||||
|
\addlegendentry{Logging to File ±SD}
|
||||||
|
\end{axis}
|
||||||
|
\end{tikzpicture}
|
||||||
|
\caption{Execution times of a simple program using \texttt{intercept.so} with different output modes.}
|
||||||
|
\label{fig:intercept-performance}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
|
||||||
|
\subsection{Performance when Manipulating}\label{subsec:performance-manipulating}
|
||||||
|
|
||||||
|
Meaningful performance evaluation of function call manipulation requires a specific server implementation, since the response speed of the server dominates overall performance.
|
||||||
|
As seen in Subsection~\ref{subsec:performance-intercepting}, most delay comes not from intercepting itself, but from the further processing.
|
||||||
|
This also applies to function call manipulation.
|
||||||
|
The performance degradation heavily depends on the response speed of the used socket.
|
||||||
|
Despite this, a simple performance test has been conducted.
|
||||||
|
|
||||||
|
The setup was the same as in Subsection~\ref{subsec:performance-intercepting}.
|
||||||
|
But this time \texttt{intercept.so} was configured to connect to a Unix domain socket.
|
||||||
|
At first, a simple C program was used to respond to the messages on the socket, only using \texttt{getline} and \texttt{fprintf}.
|
||||||
|
For the first test run the program always responded with the \texttt{"ok"} command (``Manipulate (simple ok)''), for the second with the \texttt{"return 0"} command (``Manipulate (simple return)'').
|
||||||
|
After that, the default Python implementation developed in this work, which parses the incoming messages automatically, was tested.
|
||||||
|
Again, at first always responding with the \texttt{"ok"} command (``Manipulate (Python ok)''), and then with the \texttt{"return 0"} command (``Manipulate (Python return)'').
|
||||||
|
Figure~\ref{fig:manipulate-performance} illustrates the results and some previous measurements for context.
|
||||||
|
|
||||||
|
Results of the simple C program show, that the communication over the socket alone has only minimal overhead compared with ``Logging to stderr''.
|
||||||
|
Due to the parsing of messages the Python program has slightly worse performance degradation.
|
||||||
|
The ``return'' test is slightly faster compared to the ``ok'' test, because the \texttt{pipe} function normally responds with \texttt{return 0; errno 0; fildes=[7,8]}, but when using \texttt{"return 0"} it responds with \texttt{return 0; errno 0}, which is less data to parse.
|
||||||
|
|
||||||
|
\begin{figure}
|
||||||
|
\centering
|
||||||
|
\begin{tikzpicture}
|
||||||
|
\begin{axis}[
|
||||||
|
xmin=100, xmax=5000,
|
||||||
|
ymin=0, ymax=400,
|
||||||
|
scaled y ticks=false,
|
||||||
|
ymajorgrids=true,
|
||||||
|
grid style=dashed,
|
||||||
|
legend pos=north west,
|
||||||
|
legend cell align={left},
|
||||||
|
width=\textwidth,
|
||||||
|
xlabel=Iterations,
|
||||||
|
ylabel=Execution Time,
|
||||||
|
x unit=\#,
|
||||||
|
y unit=\si{\milli\second},
|
||||||
|
]
|
||||||
|
|
||||||
|
\addplot[color=blue] table [x=Cycles, y expr=\thisrow{Baseline Avg}/1000000, col sep=semicolon] {src/performance/stat.csv};
|
||||||
|
\addlegendentry{Baseline}
|
||||||
|
\addplot[name path=a_top,color=blue!50,forget plot] table [x=Cycles, y expr=(\thisrow{Baseline Avg} + \thisrow{Baseline SD}) / 1000000, col sep=semicolon] {src/performance/stat.csv};
|
||||||
|
\addplot[name path=a_down,color=blue!50,forget plot] table [x=Cycles, y expr=(\thisrow{Baseline Avg} - \thisrow{Baseline SD}) / 1000000, col sep=semicolon] {src/performance/stat.csv};
|
||||||
|
\addplot[blue!20,fill opacity=0.2] fill between[of=a_top and a_down];
|
||||||
|
\addlegendentry{Baseline ±SD}
|
||||||
|
|
||||||
|
\addplot[color=green] table [x=Cycles, y expr=\thisrow{Intercept Avg}/1000000, col sep=semicolon] {src/performance/stat.csv};
|
||||||
|
\addlegendentry{Intercepting}
|
||||||
|
\addplot[name path=b_top,color=green!50,forget plot] table [x=Cycles, y expr=(\thisrow{Intercept Avg} + \thisrow{Intercept SD}) / 1000000, col sep=semicolon] {src/performance/stat.csv};
|
||||||
|
\addplot[name path=b_down,color=green!50,forget plot] table [x=Cycles, y expr=(\thisrow{Intercept Avg} - \thisrow{Intercept SD}) / 1000000, col sep=semicolon] {src/performance/stat.csv};
|
||||||
|
\addplot[green!20,fill opacity=0.2] fill between[of=b_top and b_down];
|
||||||
|
\addlegendentry{Intercepting ±SD}
|
||||||
|
|
||||||
|
\addplot[color=red] table [x=Cycles, y expr=\thisrow{Ok Avg}/1000000, col sep=semicolon] {src/performance/stat.csv};
|
||||||
|
\addlegendentry{Manipulate (simple ok)}
|
||||||
|
\addplot[name path=d_top,color=red!50,forget plot] table [x=Cycles, y expr=(\thisrow{Ok Avg} + \thisrow{Ok SD}) / 1000000, col sep=semicolon] {src/performance/stat.csv};
|
||||||
|
\addplot[name path=d_down,color=red!50,forget plot] table [x=Cycles, y expr=(\thisrow{Ok Avg} - \thisrow{Ok SD}) / 1000000, col sep=semicolon] {src/performance/stat.csv};
|
||||||
|
\addplot[red!20,fill opacity=0.2] fill between[of=d_top and d_down];
|
||||||
|
\addlegendentry{Manipulate (simple ok) ±SD}
|
||||||
|
|
||||||
|
\addplot[color=orange] table [x=Cycles, y expr=\thisrow{Return Avg}/1000000, col sep=semicolon] {src/performance/stat.csv};
|
||||||
|
\addlegendentry{Manipulate (simple return)}
|
||||||
|
\addplot[name path=d_top,color=orange!50,forget plot] table [x=Cycles, y expr=(\thisrow{Return Avg} + \thisrow{Return SD}) / 1000000, col sep=semicolon] {src/performance/stat.csv};
|
||||||
|
\addplot[name path=d_down,color=orange!50,forget plot] table [x=Cycles, y expr=(\thisrow{Return Avg} - \thisrow{Return SD}) / 1000000, col sep=semicolon] {src/performance/stat.csv};
|
||||||
|
\addplot[orange!20,fill opacity=0.2] fill between[of=d_top and d_down];
|
||||||
|
\addlegendentry{Manipulate (simple return) ±SD}
|
||||||
|
|
||||||
|
\addplot[color=cyan] table [x=Cycles, y expr=\thisrow{PyOk Avg}/1000000, col sep=semicolon] {src/performance/stat.csv};
|
||||||
|
\addlegendentry{Manipulate (Python ok)}
|
||||||
|
\addplot[name path=d_top,color=cyan!50,forget plot] table [x=Cycles, y expr=(\thisrow{PyOk Avg} + \thisrow{PyOk SD}) / 1000000, col sep=semicolon] {src/performance/stat.csv};
|
||||||
|
\addplot[name path=d_down,color=cyan!50,forget plot] table [x=Cycles, y expr=(\thisrow{PyOk Avg} - \thisrow{PyOk SD}) / 1000000, col sep=semicolon] {src/performance/stat.csv};
|
||||||
|
\addplot[cyan!20,fill opacity=0.2] fill between[of=d_top and d_down];
|
||||||
|
\addlegendentry{Manipulate (Python ok) ±SD}
|
||||||
|
|
||||||
|
\addplot[color=magenta] table [x=Cycles, y expr=\thisrow{PyReturn Avg}/1000000, col sep=semicolon] {src/performance/stat.csv};
|
||||||
|
\addlegendentry{Manipulate (Python return)}
|
||||||
|
\addplot[name path=d_top,color=magenta!50,forget plot] table [x=Cycles, y expr=(\thisrow{PyReturn Avg} + \thisrow{PyReturn SD}) / 1000000, col sep=semicolon] {src/performance/stat.csv};
|
||||||
|
\addplot[name path=d_down,color=magenta!50,forget plot] table [x=Cycles, y expr=(\thisrow{PyReturn Avg} - \thisrow{PyReturn SD}) / 1000000, col sep=semicolon] {src/performance/stat.csv};
|
||||||
|
\addplot[magenta!20,fill opacity=0.2] fill between[of=d_top and d_down];
|
||||||
|
\addlegendentry{Manipulate (Python return) ±SD}
|
||||||
|
\end{axis}
|
||||||
|
\end{tikzpicture}
|
||||||
|
\caption{Execution times of a simple program using \texttt{intercept.so} with different manipulation modes.}
|
||||||
|
\label{fig:manipulate-performance}
|
||||||
|
\end{figure}
|
||||||
27
thesis/src/06.conclusion.tex
Normal file
27
thesis/src/06.conclusion.tex
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
|
||||||
|
\chapter{Conclusion}\label{ch:conclusion}
|
||||||
|
|
||||||
|
The primary goal of this work was to support the Operating Systems course by providing a practical and reliable way to automatically test students' C programs.
|
||||||
|
Exercises in this course often involve low-level concepts such as semaphores, sockets, and shared memory, which are difficult to test automatically with conventional approaches.
|
||||||
|
The motivation was therefore to develop a technique that allows intercepting function calls in order to verify whether students invoked the correct functions with appropriate arguments and in the correct order.
|
||||||
|
|
||||||
|
To address these challenges, this work presented \texttt{intercept.so}, a shared object file intended to be preloaded using \texttt{LD\_PRELOAD}, which may be used to intercept function calls on Linux systems.
|
||||||
|
Furthermore, a supporting Python program, \texttt{intercept}, was presented to make the shared object easier to use.
|
||||||
|
By using preloading to hook or intercept function calls, the overhead and performance degradation remain negligible for the purpose of testing student submissions.
|
||||||
|
To make use of intercepted function calls, some techniques of automatic testing of simple C programs were discussed.
|
||||||
|
|
||||||
|
In addition, the work has shown that creating an automated testing tool for the Operating Systems course assignments is both feasible and practical.
|
||||||
|
The evaluation indicates that performance overhead is negligible and therefore not a hindrance to real-world use.
|
||||||
|
Finally, since the approach relies on standard and portable mechanisms, the solution can be considered future-proof and adaptable to other environments.
|
||||||
|
|
||||||
|
The source code of the programs developed in this work is attached below.
|
||||||
|
(Not all PDF viewers may open/download attachments.)
|
||||||
|
|
||||||
|
\texttt{intercept.so}:
|
||||||
|
\textattachfile[mimetype=text/plain]{../proj/intercept/src/intercept.c}{\textcolor{blue}{\texttt{intercept.c}}} (source code), and
|
||||||
|
\textattachfile[mimetype=text/plain]{../proj/intercept/Makefile}{\textcolor{blue}{\texttt{Makefile}}}.
|
||||||
|
|
||||||
|
\textattachfile[mimetype=text/plain]{../proj/intercept/intercept}{\textcolor{blue}{\texttt{intercept}}} (Python program).
|
||||||
|
|
||||||
|
Automatic testing:
|
||||||
|
\textattachfile[mimetype=application/zip]{src/attachments/auto-test.zip}{\textcolor{blue}{\texttt{auto-test.zip}}} (zipped Python programs).
|
||||||
@@ -37,6 +37,12 @@
|
|||||||
@manual{malloc.3,
|
@manual{malloc.3,
|
||||||
title = {malloc(3) -- Library Functions Manual -- Linux manual pages},
|
title = {malloc(3) -- Library Functions Manual -- Linux manual pages},
|
||||||
}
|
}
|
||||||
|
@manual{getaddrinfo.3,
|
||||||
|
title = {getaddrinfo(3) -- Library Functions Manual -- Linux manual pages},
|
||||||
|
}
|
||||||
|
@manual{getline.3,
|
||||||
|
title = {getline(3) -- Library Functions Manual -- Linux manual pages},
|
||||||
|
}
|
||||||
@book{netsectools2005,
|
@book{netsectools2005,
|
||||||
author = {Dhanjani, Nitesh and Clarke, Justin},
|
author = {Dhanjani, Nitesh and Clarke, Justin},
|
||||||
title = {Network Security Tools},
|
title = {Network Security Tools},
|
||||||
@@ -46,7 +52,123 @@
|
|||||||
publisher = {O'Reilly},
|
publisher = {O'Reilly},
|
||||||
url = {https://litux.nl/mirror/networksecuritytools/0596007949/toc.html},
|
url = {https://litux.nl/mirror/networksecuritytools/0596007949/toc.html},
|
||||||
}
|
}
|
||||||
|
@book{linuxkernel,
|
||||||
|
author = {Daniel P. Bovet and Marco Cesati},
|
||||||
|
title = {Understanding the Linux Kernel},
|
||||||
|
subtitle = {From I/O Ports to Process Management},
|
||||||
|
edition = {3rd},
|
||||||
|
date = {November 2005},
|
||||||
|
isbn = {978-0-596-00565-8},
|
||||||
|
publisher = {O'Reilly},
|
||||||
|
}
|
||||||
@manual{gcc,
|
@manual{gcc,
|
||||||
title = {Using the GNU Compiler Collection (GCC)},
|
title = {Using the GNU Compiler Collection (GCC)},
|
||||||
url = {https://gcc.gnu.org/onlinedocs/gcc/index.html},
|
url = {https://gcc.gnu.org/onlinedocs/gcc/index.html},
|
||||||
}
|
}
|
||||||
|
@manual{sud,
|
||||||
|
title = {Syscall User Dispatch -- The Linux Kernel documentation},
|
||||||
|
url = {https://docs.kernel.org/admin-guide/syscall-user-dispatch.html},
|
||||||
|
}
|
||||||
|
@inproceedings{zpoline,
|
||||||
|
author = {Kenichi Yasukata and Hajime Tazaki and Pierre-Louis Aublin and Kenta Ishiguro},
|
||||||
|
title = {zpoline: a system call hook mechanism based on binary rewriting},
|
||||||
|
booktitle = {2023 USENIX Annual Technical Conference (USENIX ATC '23)},
|
||||||
|
year = {2023},
|
||||||
|
isbn = {978-1-939133-35-9},
|
||||||
|
address = {Boston, MA},
|
||||||
|
pages = {293--300},
|
||||||
|
url = {https://www.usenix.org/conference/atc23/presentation/yasukata},
|
||||||
|
publisher = {USENIX Association},
|
||||||
|
month = jul,
|
||||||
|
}
|
||||||
|
@article{datahook,
|
||||||
|
author = {Hong, Quan and Li, Jiaqi and Zhang, Wen and Zhai, Lidong},
|
||||||
|
title = {DataHook: An Efficient and Lightweight System Call Hooking Technique without Instruction Modification},
|
||||||
|
year = {2025},
|
||||||
|
issue_date = {July 2025},
|
||||||
|
publisher = {Association for Computing Machinery},
|
||||||
|
address = {New York, NY, USA},
|
||||||
|
volume = {2},
|
||||||
|
number = {ISSTA},
|
||||||
|
url = {https://doi.org/10.1145/3728874},
|
||||||
|
doi = {10.1145/3728874},
|
||||||
|
journal = {Proc. ACM Softw. Eng.},
|
||||||
|
month = jun,
|
||||||
|
articleno = {ISSTA005},
|
||||||
|
numpages = {21},
|
||||||
|
keywords = {DataHook, Hooking technique, Software analysis, Software debugging, System call},
|
||||||
|
}
|
||||||
|
@article{lopez2017,
|
||||||
|
title={A survey on function and system call hooking approaches},
|
||||||
|
author={Lopez, Juan and Babun, Leonardo and Aksu, Hidayet and Uluagac, A. Selcuk},
|
||||||
|
journal={Journal of Hardware and Systems Security},
|
||||||
|
volume={1},
|
||||||
|
number={2},
|
||||||
|
pages={114--136},
|
||||||
|
year={2017},
|
||||||
|
publisher={Springer},
|
||||||
|
}
|
||||||
|
@masterthesis{kern2023,
|
||||||
|
author = {Patrick Kern},
|
||||||
|
title = {Injecting Shared Libraries with LD\_PRELOAD for Cyber Deception},
|
||||||
|
school = {TU Wien},
|
||||||
|
year = {2023},
|
||||||
|
}
|
||||||
|
@inproceedings{guo2011cde,
|
||||||
|
title={CDE: Using system call interposition to automatically create portable software packages},
|
||||||
|
author={Guo, Philip J. and Engler, Dawson},
|
||||||
|
booktitle={2011 USENIX Annual Technical Conference (USENIX ATC 11)},
|
||||||
|
year={2011},
|
||||||
|
}
|
||||||
|
@inproceedings{detours,
|
||||||
|
title={Detours: Binary interception of Win32 functions},
|
||||||
|
author={Galen Hunt and Doug Brubacher},
|
||||||
|
booktitle={Windows NT 3rd symposium},
|
||||||
|
year={1999},
|
||||||
|
}
|
||||||
|
@inproceedings{spillane2007,
|
||||||
|
author = {Spillane, Richard P. and Wright, Charles P. and Sivathanu, Gopalan and Zadok, Erez},
|
||||||
|
title = {Rapid file system development using ptrace},
|
||||||
|
year = {2007},
|
||||||
|
isbn = {9781595937513},
|
||||||
|
publisher = {Association for Computing Machinery},
|
||||||
|
address = {New York, NY, USA},
|
||||||
|
url = {https://doi.org/10.1145/1281700.1281722},
|
||||||
|
doi = {10.1145/1281700.1281722},
|
||||||
|
booktitle = {Proceedings of the 2007 Workshop on Experimental Computer Science},
|
||||||
|
pages = {22–es},
|
||||||
|
keywords = {rapid prototyping, monitors},
|
||||||
|
location = {San Diego, California},
|
||||||
|
series = {ExpCS '07},
|
||||||
|
}
|
||||||
|
@inproceedings{spif,
|
||||||
|
author = {Sze, Wai Kit and Sekar, R.},
|
||||||
|
title = {Provenance-based Integrity Protection for Windows},
|
||||||
|
year = {2015},
|
||||||
|
isbn = {9781450336826},
|
||||||
|
publisher = {Association for Computing Machinery},
|
||||||
|
address = {New York, NY, USA},
|
||||||
|
url = {https://doi.org/10.1145/2818000.2818011},
|
||||||
|
doi = {10.1145/2818000.2818011},
|
||||||
|
booktitle = {Proceedings of the 31st Annual Computer Security Applications Conference},
|
||||||
|
pages = {211–220},
|
||||||
|
numpages = {10},
|
||||||
|
location = {Los Angeles, CA, USA},
|
||||||
|
series = {ACSAC '15},
|
||||||
|
}
|
||||||
|
@inproceedings{ostia,
|
||||||
|
title={Ostia: A Delegating Architecture for Secure System Call Interposition},
|
||||||
|
author={Garfinkel, Tal and Pfaff, Ben and Rosenblum, Mendel},
|
||||||
|
booktitle={NDSS},
|
||||||
|
year={2004},
|
||||||
|
}
|
||||||
|
@inproceedings{fraser2000,
|
||||||
|
author={Fraser, T. and Badger, L. and Feldman, M.},
|
||||||
|
booktitle={Proceedings DARPA Information Survivability Conference and Exposition. DISCEX'00},
|
||||||
|
title={Hardening COTS software with generic software wrappers},
|
||||||
|
year={2000},
|
||||||
|
volume={2},
|
||||||
|
number={},
|
||||||
|
pages={323-337 vol.2},
|
||||||
|
doi={10.1109/DISCEX.2000.821530},
|
||||||
|
}
|
||||||
|
|||||||
BIN
thesis/src/attachments/auto-test.zip
Normal file
BIN
thesis/src/attachments/auto-test.zip
Normal file
Binary file not shown.
BIN
thesis/src/listings/main
Executable file
BIN
thesis/src/listings/main
Executable file
Binary file not shown.
50
thesis/src/performance/perf-1.csv
Normal file
50
thesis/src/performance/perf-1.csv
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
0324229;0344789;0315172;0366980;0451151;0462482;0446011;0296485;0465337;0405983;0343554;0440008;0465907;0449405;0348523;0361888;0358973;0335639;0323174;0333324;0434446;0444885;0455145;0433704;0316631;0440787;0464201;0453772;0438272;0314808
|
||||||
|
0613534;0585481;0624114;0707201;0626529;0729825;0782584;0682264;0592513;0788676;0615306;0619885;0818591;0608523;0603173;0642398;0606199;0794877;0647046;0624163;0786830;0623031;0630574;0588264;0766903;0706558;0741855;0920262;0822026;0635223
|
||||||
|
0915874;0929220;1354985;1253021;0970777;0876259;0918032;0873931;0920173;1045615;1097067;0876029;0905656;1020317;0950143;0951745;1152357;0927634;1178937;1007000;1016156;1086956;0890182;0928126;0877984;1030849;0931188;1325593;0972338;0960041
|
||||||
|
1457189;1225447;1443298;1345482;1255010;1345018;1228475;1480843;1238893;1185135;1416952;1351642;1326401;1356037;1200298;1234515;1257900;1182870;1175615;1307243;1238887;1271089;1275817;1269635;1331454;1376381;1361040;1392340;1314486;1278415
|
||||||
|
1521309;1644208;1452842;1587104;1814898;1534939;1578423;1540678;1507091;1548842;1521678;1638374;1487388;1752173;1573874;1508567;1487365;1667193;1762838;1807674;1541997;1453635;1574287;1723888;1569727;1498438;1784162;1593661;1551629;1538803
|
||||||
|
1822231;1856406;1896143;1744459;1909036;1804293;2031491;1835551;1764232;1930073;1751766;2003322;1839696;1984855;1865374;1884680;1781369;1920989;1838749;1832316;2312261;1831192;1808037;1838015;1866569;1938166;1789449;2026515;2255656;1900361
|
||||||
|
2249322;2038867;2235614;2346377;2350745;2435958;2226564;2220021;2186657;2418702;2076484;2216182;2111830;2137850;2214567;2388661;2044799;2188625;2183625;2099032;2230664;2376744;2157352;2189644;2171629;2132283;2277501;2172709;2148432;2187367
|
||||||
|
2840629;2714056;3141806;2771946;2452543;2438436;2583173;2758749;2733540;2701128;2338241;2385792;2315547;2598459;2463330;2686587;2569853;2778734;2605430;2459150;2497503;2617182;2874473;2881476;2731159;2360229;2800070;2855626;2305833;2588464
|
||||||
|
2978300;2626996;2933804;2631274;3037121;2939714;3036780;2841646;2610784;2877925;2946946;2634919;2657963;2935193;2753896;2737855;2756861;2829440;3144120;3112911;2776608;3107951;2616942;2708567;2764044;2815251;2860607;2597754;2755776;2746568
|
||||||
|
2999501;2902085;2940890;3118959;3049757;2920500;3238958;3070095;3217436;2939725;3034706;3040568;3048622;3480659;2993758;2893466;2930207;3083369;3046619;3269283;3239346;3517567;3081805;3383581;3234205;3369042;2918031;3161585;3067757;3071072
|
||||||
|
3543013;3210018;3363180;3404129;3413245;3500030;3192354;3387165;3357448;3659976;3444655;3337371;3357308;3506982;3391863;3432280;3403546;3654543;3171783;3366734;3207305;3389343;3181995;3563026;3181420;3687811;3437920;3353197;3630820;3452862
|
||||||
|
3575325;3688759;3666803;3519527;3884132;3680724;3482566;3721951;3699715;3858539;3868556;3597023;3690668;3687269;3970321;3472939;3639528;3643774;3965451;3642107;4044074;3741771;3642391;4113987;3770622;3684498;3595078;3832436;3670054;3722726
|
||||||
|
4098397;3995101;3962495;4017150;3984825;4076955;3949461;4158994;4043784;4190313;4131274;3785438;4133945;4241796;4129853;4145823;4148908;4294683;4218621;4174221;4005968;3874757;3936558;4056813;3959610;4040818;4166043;4149699;3911579;4640181
|
||||||
|
4666722;4289677;4486504;4537451;4197031;4297046;4320099;4110465;4325216;4077628;4070002;4295042;4295442;4443802;4370365;4095314;4266498;4286406;4423824;4323537;4304137;4504107;4540978;4272880;4295273;4306995;4059830;4100668;4306720;3905504
|
||||||
|
4921671;4576855;4588897;4761663;4429743;4209511;4905470;4367176;4751576;4808977;4805048;4390056;4327562;4162519;4448166;4151796;4899454;4805249;4608714;4807731;4501893;4559895;4592558;4567107;4779029;4553147;4563767;4534558;4598853;4187771
|
||||||
|
4866412;4869016;4860007;5015458;4884161;4776511;4907164;5362039;4501933;4871731;4992255;4878543;4975771;5257238;5042218;5221004;4782161;5216373;4757570;4697362;4897109;4883963;4900504;5029424;4868490;4722535;4913435;4952309;4922270;4867503
|
||||||
|
5138528;4961783;5176560;4987482;5190235;5459997;5166306;5177587;5164812;4942039;5194908;5430193;5182462;5310149;5183853;5203380;5316989;5303472;4959744;4895729;5276517;4969250;5143317;5426855;5161872;4968726;5017229;5187859;5360593;5136067
|
||||||
|
5468701;5814780;5631965;5476333;5513444;5553019;5488523;5540473;5379340;5533458;5494401;5182107;5262482;5583331;5671130;5509617;5498294;5485950;5173895;5466340;5472922;5190205;5412223;6033795;5241181;5893292;5456006;5467467;5844846;5193015
|
||||||
|
5738819;5522430;5510727;5906672;6174729;5763864;5888906;5784903;5692284;5815631;5772979;5899081;5500902;6141739;5893980;5713551;5799847;6178798;5465631;5998278;5806657;6073402;5835843;5788070;5906518;5790504;5683216;5906556;5753901;5470253
|
||||||
|
6051224;5853592;5934538;6381208;6163197;5902213;6338564;5936909;6069013;6060837;6042190;6102977;6099901;5932788;6298162;5861319;5900565;5800281;6063357;6143431;6113644;6201321;6114784;6089395;5833772;6054787;6204686;5948933;6061999;6235313
|
||||||
|
6334033;6503689;6375742;6404467;6392042;6039363;6440515;6339781;6364037;6065501;6471493;6397490;6674824;6052194;7032291;6207503;6381838;6353212;6389221;6367639;6337761;6337401;6421131;6386814;6255982;6113748;6369469;6456697;6455174;6611194
|
||||||
|
6500330;6330062;6706075;6530317;6545385;6532019;6746963;6367983;6374284;6738575;6658921;6645455;6625366;6705981;6371367;6521666;6565369;6528658;6409448;6588152;6686110;6872779;6931501;6857389;6880863;6664567;7105414;6807551;6495671;6399406
|
||||||
|
6672330;7073361;7003998;7313331;7286610;6973387;6791678;7007021;6786347;6936355;7017571;7090400;6956823;7053469;6974257;6741489;7023371;7066012;6704467;6702964;6961631;7228754;6986307;6627607;6970396;7006134;7066470;6943243;6972048;6649338
|
||||||
|
7326499;6962068;7266563;6911431;7462178;7379429;7796530;7496644;7800658;6952198;7276780;7273864;7364660;7245771;7339941;7351613;6947847;7330041;7364036;7332135;7186375;7249486;7588767;6927196;7364305;7021887;7307105;7319319;7253522;7270134
|
||||||
|
7605948;8106489;7805682;7375825;7690209;7613973;7679068;7482199;7350757;7900632;7722369;7670059;7866947;7794157;7615304;7562592;7270330;7699114;8007345;7682792;7729732;8174395;7822039;7879138;7744039;7683843;7272843;7601895;7643134;7559734
|
||||||
|
7928582;7910006;8049483;7914033;7906459;8521379;7872453;7892230;7672409;8272740;7554071;7561696;7603175;7864076;7817285;7563207;7245287;7552497;8043710;7093626;7212603;7360498;7211181;7478755;7164732;7218655;7125666;7212874;7508260;7647347
|
||||||
|
7795712;8189357;8138329;8263359;7993991;8296863;8169899;8252447;8326590;8345626;7768749;8307903;8215035;8545789;8187060;8267886;8121204;8176110;7862778;8165839;8127185;8412582;8161440;8153586;8275249;8146752;8257865;7784196;8172511;8354911
|
||||||
|
8509087;8472547;8556136;8149416;8064152;8656670;8636982;8759796;8126973;8741542;8494968;8511900;8489908;8269115;8147281;8613495;8477174;8233837;8552961;8573412;8564692;8660451;8334490;8491870;8817286;8494411;8176416;8535077;8065682;8259255
|
||||||
|
9021408;9136504;8445680;9025541;8849087;8438188;8813432;8952717;8906071;8857573;9025104;8934421;8578332;8992964;8813034;8868994;8813651;8376131;8627668;8878325;8830336;8508645;8807889;8842191;9219348;8909922;8368578;8628140;8805960;8858072
|
||||||
|
9165009;9231217;8940279;9095003;8673075;9083977;9237289;9130926;9013212;9188447;8658465;8834113;9663822;8645004;8962029;9159057;9091280;9155537;8662509;9054493;9093007;8663436;8781098;8663624;9068540;8634582;9265467;9169776;9233269;9105966
|
||||||
|
9494692;9402799;9235076;9546139;9322324;9415174;9427840;9537654;9036835;9726283;9440307;9275539;9195141;9210358;8918362;9067712;9809575;9642563;9056945;8956367;9382505;9823413;8978025;9338383;9640287;8944885;9580745;9045238;9057522;9424413
|
||||||
|
9782625;9239275;9224354;9707052;9351080;9434503;9755974;9517734;9231229;9666724;9864591;9994684;10018802;9888142;10011815;9918670;9792890;9901353;9767967;10056683;9790830;9975800;9727751;9830320;10516850;9778887;9734109;9886525;9911625;10084201
|
||||||
|
10000195;9657851;10232236;9721483;10272232;10016879;10160961;9999312;9637100;9684352;10133281;10266039;9621855;9506405;10211818;9746004;9830228;10158550;9512922;9790525;10048308;10416881;9515451;9647550;10224178;9529746;10121305;10163877;9517568;9928403
|
||||||
|
10421768;10132969;10688426;10106906;9929647;9990827;10390417;9905767;10412267;10336458;10398738;10451902;10050624;10371300;10009783;10386547;10629280;9950772;10657985;10555623;10345132;10563586;9917612;9803696;9818786;9904371;10589441;10159587;10318529;10403945
|
||||||
|
10630706;10658080;10134293;10644078;10512329;10779992;10615529;10235465;10254680;10743145;10145775;10793069;10781414;10739041;10107624;10809416;10704560;10106159;10388940;11319617;10696679;10791312;10298459;10657870;10583182;10718226;10090427;10640961;10426181;10465607
|
||||||
|
10881488;10359257;10713408;11308689;10958643;10947421;10594802;11056832;10654325;11324492;10553266;11139979;10534968;10896953;11190675;10522390;10992949;11168639;10592655;10962695;10920771;11070554;11426587;11333895;11180383;10985984;11212145;10922637;10661087;10901002
|
||||||
|
11155829;11647177;11442615;11427946;11287331;11305155;11267792;11245226;11291314;10809125;11308054;10790957;11328274;11265658;10882993;11572356;11603765;11310783;11013995;11225976;10908797;11530358;10785325;10880840;11292301;10857663;11254275;11960429;10766084;11165761
|
||||||
|
11515911;11448687;12109624;11078907;11353942;11025461;11787301;11607812;11628984;11300612;11006328;10985637;11817685;11574872;11463794;11816110;11556414;11935440;11761751;11298519;11251307;11604292;11393801;11733662;11599839;11098945;11390191;11551034;11580639;12167329
|
||||||
|
11923365;12048197;11972059;11901269;11280200;11700326;11320036;11419519;12074680;11211723;11616349;12064199;11351802;12175041;11366240;11998317;12299611;12037641;11340395;11556376;12334456;12227778;12067245;12124957;11866132;11973230;12041422;12073812;11953157;11405624
|
||||||
|
12165580;12072636;11948004;12189664;12181347;11749946;12493871;12468883;12070215;12804270;12241448;11720767;12386840;12541347;11735673;11931434;12306871;11889510;11536743;12381752;12143971;11920557;12159750;11936934;12076798;12210566;12254710;11540395;12268377;12387466
|
||||||
|
12860132;12326958;12498590;13018087;13087401;11969921;11935164;12709205;12695297;11853071;12625670;12549392;12505166;12618296;12592202;12466949;12762272;12707935;12544596;12846364;12704987;11894035;11878815;12608740;12637082;12030917;12633435;13020382;12547248;12669562
|
||||||
|
12883407;12871883;13135373;12804562;12850540;12982435;12201361;12916256;13116836;12700795;12925553;12588587;12515887;12196458;12134657;12317409;12609595;12454023;12789023;12834291;12821393;12848275;12917449;12845869;12890947;12606473;12596182;12212699;12944367;12964774
|
||||||
|
13103532;12555711;13224236;12699930;13022374;13055685;13031392;12493757;13341830;13369392;13101625;13567236;13289496;13090599;13194350;13109376;13030624;13056702;13179199;13222071;13141274;13041311;12746400;13334358;13441633;13359063;13234561;12677644;13404980;13216927
|
||||||
|
12862878;13032789;13852354;12997780;13633951;12851015;13445744;13751910;12949793;13557710;13356249;12893515;13608246;13386846;13515756;13208681;13422364;13931650;13719038;13240160;13395459;12921144;13428833;13335593;12971158;13474902;12714910;13144049;13034497;13453207
|
||||||
|
13758577;14074689;13842176;13661048;14205731;13434579;13761890;13684310;14184878;13995821;13949449;13272981;14397487;13373295;13611946;13790602;13158790;14006147;13174148;14033529;13842098;13652441;13585632;12963639;13200787;13505694;13645906;13266103;13759266;14130262
|
||||||
|
13933161;14529924;14379613;13568303;13590316;14588294;13754692;13670109;13977613;14016046;13735353;13678745;14379368;13794515;13531497;13966768;13582285;14018658;14309581;14735985;14100767;14101857;13900937;14350096;13724817;14134419;13547224;13678206;13706581;14338198
|
||||||
|
13650840;14458753;13829225;13584172;14928740;13582498;14444343;15004536;13676589;13607125;13863628;14244043;13971536;13659059;14758977;14583799;14669985;14561905;14493144;14025527;14428236;14550140;13574475;13653098;14306539;13801353;14810051;14648670;14328320;14719374
|
||||||
|
14419936;14946733;15384388;14470703;13993701;13871395;14440644;14565295;14734231;14393641;14839072;15116748;14812198;14104511;14849931;14186210;14691525;14922883;14630817;14767651;14382705;15069311;14018471;14705129;14743412;14706220;13964758;14108124;14621616;14839176
|
||||||
|
14845317;14986819;14241920;15045270;14663814;14194859;14682600;14389995;14946089;14419522;14734641;15116264;14320088;14851865;14619940;14832787;14418988;15109371;14928601;14747262;14904333;14963168;14426211;15066025;14295507;14603794;14952884;15001387;14620524;14327327
|
||||||
|
15629681;15281389;15345592;15363897;15640709;15488638;14675978;15458107;15023250;15577887;14696205;15337242;14731703;14935758;14813301;15280823;14479005;15668852;15016680;14700830;15443718;15528250;15400795;15071165;15242125;14832384;15422923;14714997;15544939;15649651
|
||||||
|
50
thesis/src/performance/perf-2.csv
Normal file
50
thesis/src/performance/perf-2.csv
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
12386073;10054904;10597530;10062469;10451459;11034914;10769732;11010135;10524027;10147651;10461115;10720075;10047908;10613609;10119276;10479631;10334140;10275777;10011367;10301939;10350272;10102642;10549503;10370889;10089536;10160502;10226790;10315121;10005193;10239204
|
||||||
|
10584811;10799245;10733036;10760640;10483565;10719952;10964843;10416144;10277045;10792098;10889276;10699349;10522378;10982295;11079964;10666897;10749746;10733044;11106365;10533569;11455658;10212830;10819980;11010147;10349163;10321499;10921095;10638539;10779761;10864295
|
||||||
|
11407642;10962984;11056495;10588132;11362034;11362956;10934760;10533777;10909500;10527444;11040844;11311345;10895954;10657594;10913257;11412089;10719012;11187715;11341572;11652031;11275384;10772024;10694434;10536729;10627605;10773096;10786882;10768046;10823863;11026023
|
||||||
|
11234695;11389954;11708298;11275684;11204585;11438636;11389591;11585911;11572184;11614887;10858477;11351198;11100384;11802307;11590650;11242938;11086898;11357500;10938592;11885277;11372497;11072560;11566533;11131684;11570788;10936758;11285990;11356907;11888471;11369000
|
||||||
|
11511905;11562352;11826821;11853393;11692202;11905824;11828204;12333208;12224748;11925611;11649811;11783037;11540920;11550007;11754571;11337978;11672593;11339921;12039791;11542101;11656269;11411539;11926692;11517522;11512292;11165564;11959625;11784667;11369777;12102409
|
||||||
|
11942040;12382850;11675477;12016374;12034900;12083524;12433558;11911751;12256126;12246437;12311641;11997896;11658662;12320688;11931038;12284519;12275250;11643984;12001974;11881772;11748895;11773703;12216907;12316099;11596903;12210615;12285449;11793681;11982585;12222217
|
||||||
|
11989649;13049061;12382717;12526654;12286781;12284937;12618351;12294586;12222126;12622748;12444785;12930611;12326917;12116604;12153834;12583642;12201335;12260117;12100631;13060400;12100360;12523845;11960220;12608349;12304482;12111010;12191014;11978935;12011358;12587228
|
||||||
|
13127028;12842189;13018418;12493466;12729371;12767996;12947881;12651872;12201935;12551298;12927713;12373404;12356391;12770328;12731003;12619248;12527631;12639246;13149718;12856335;12418420;12938733;12795918;12769556;12991604;12752483;13108057;12621732;12846644;13108208
|
||||||
|
13653840;12668350;13187410;13509652;13456850;13141882;12885860;13216737;12457825;12418208;12632281;13083641;13645813;12570431;13159216;12650545;13285119;12994879;13104992;12427917;13426431;13072838;12673659;12871741;12880838;12808949;13201155;12732703;13261381;12709797
|
||||||
|
13134849;13393585;13143373;13313450;13814596;13292451;13170425;13450333;13881424;12968547;13254086;13366322;13594622;13115568;13612015;13234739;13188449;13525719;13347986;13370279;14144641;14038787;13469140;13406178;13562950;13033570;13171466;13195413;13941649;13822219
|
||||||
|
13606143;13489809;13894680;14059425;13291958;13201353;13552829;13250547;13368725;13672498;13779977;14023296;13929004;13802540;13930076;13769286;14133507;13402319;13892603;13972406;13626350;13530785;13816928;14029507;13794593;14224512;13936466;13937088;14555248;13853727
|
||||||
|
13811767;14214381;14415719;13918000;13436325;14359613;13890763;14798380;14222577;14371761;14206773;14311699;14271498;13963467;13773960;13646247;13932311;14260940;14057587;14222984;14059808;14241147;14008144;14205803;13933164;14433771;14500923;14212261;13890021;14224031
|
||||||
|
14262827;14396659;14383393;14331869;14286137;14342157;14461521;13762628;14156566;14267805;14621743;13909934;14108255;14780473;14138874;14585284;14551506;13987270;14049029;14837077;14600439;14339050;14729600;14408754;14777321;14049551;14346136;14063506;14781724;14424658
|
||||||
|
14750651;14704778;15024950;15484646;15116388;14462765;14499967;14721444;14845768;14937609;14848802;14592755;14666790;14375854;14842456;15198516;14711913;15280245;15448606;15216474;14994417;14623823;15217242;14733888;14678337;14862299;14371118;14608275;14911933;14655335
|
||||||
|
15038841;14544264;15341997;15506971;15252127;14976141;15149842;14753439;14620766;15447196;14800296;15175587;14770909;14872437;15051739;15095695;15470744;15239234;14793585;15384107;15168691;15407842;14796535;15562504;15494409;15246068;15421182;15021794;15186017;14836156
|
||||||
|
15648534;15318674;15052028;15830839;15249645;15302418;16545696;15117551;15158330;15722020;15367579;15509658;15300005;15519987;15737202;15237519;16080118;15372911;15205120;15333764;15492092;15218794;15582789;15386362;15579700;15471336;15935348;15057088;15196702;15274053
|
||||||
|
16053377;15425229;15523340;15654518;15840242;15978594;15484951;15697359;15795029;15590504;15557325;15658906;15466476;15607183;15766074;16408186;15732195;15391063;15632848;15968146;16209560;16317782;15744202;15956649;16041154;16284021;15774507;16302996;15528782;15361553
|
||||||
|
16108540;16097908;16351656;16402885;16507941;16479123;15220125;16361198;15934959;15918365;16072018;15923844;15933120;16035000;15759378;16362023;15874962;15773522;15651342;16367858;15898124;16508933;15842143;15470240;15726382;16931869;16103672;16545590;15947914;16456902
|
||||||
|
16395120;16442213;16500705;17113316;16219049;16722106;16506401;16136123;16206200;16381623;16697382;16193482;16230453;16225923;16182176;16048372;16294745;16937256;16838952;16425028;16158353;16719865;16561833;16604326;16342892;16323594;16176320;16352346;16536818;16337276
|
||||||
|
17261737;16771304;16832814;16552032;17248869;17553193;16550998;17729278;16138066;16742502;17250295;16994893;16139094;17524660;16774879;16633279;16910773;17182816;17042762;17745976;16758801;17245264;16465635;16689325;17417658;17349153;17161384;16836003;16781166;17004945
|
||||||
|
16999282;17093206;17841472;17268598;17001513;17076269;17309776;16721280;16847137;17135191;17183895;17261638;17497257;17107191;17032173;17872790;16962045;16744307;17138278;17576216;17294421;17642361;16919956;17105237;17403210;17123161;17536029;17194839;16895792;17119390
|
||||||
|
17261367;17702129;17223881;17625177;16971385;17318022;17412076;17622608;17184529;17747250;17123576;17275443;17762988;17661789;17389675;16937208;17408809;17796248;17944498;17510737;17378867;17003421;18150767;17786613;17663852;17273027;17521301;17841968;17480369;17125905
|
||||||
|
18191289;18056453;17777468;18583605;17779289;17987225;18185332;17739849;17280860;17819865;18065626;18040893;17684105;17924544;18189062;18604443;17860777;17768665;17892438;17482685;17917665;17141186;17366023;17537419;17667082;18208210;17823687;17582732;18175102;17972194
|
||||||
|
18187745;18669095;18912701;18065072;18116432;18352242;17956669;17617894;18065447;17819116;18175121;18216822;18514834;18731576;17654800;17788690;18253520;18747665;17932630;18099887;18010469;18528332;18053593;18757969;17593685;17887967;18788344;17912013;18340299;18707605
|
||||||
|
18598692;17802766;18575454;18231011;18485928;18241239;19069787;18922567;19229257;18344247;18387170;18990498;18735398;18222616;19020183;19234071;18842977;19114234;18183756;18313429;18206959;19112758;18482957;18652519;18297634;18928565;18812276;18961017;17984529;18936308
|
||||||
|
18565993;18370400;19226511;19103150;19509462;19029223;18650874;18360516;19522202;19077595;19451243;19209140;19054677;18663914;18666508;18816810;18384667;19067640;19117125;18853502;18600152;18938573;19232847;18899105;19183739;18480014;19054847;18889994;19013183;18292126
|
||||||
|
18844483;18664631;19483659;19872084;19089017;19616295;19694749;19667192;18648103;18972967;19494073;19364400;19336384;19261968;19063241;18854741;19508677;19177589;19246774;19797056;18684135;18503051;19407414;19573566;19192533;18519089;19322717;19101595;19247490;19733465
|
||||||
|
19627877;19587970;19464268;19687122;20098564;20236572;19706436;19984769;19198053;19268481;19214375;19873699;19977742;19834704;19456563;19182569;19948812;19766407;20004530;19413025;19987504;19842481;19089722;19392022;19418653;19560960;20166439;19995047;19269190;19851913
|
||||||
|
19785994;20753901;20741867;20579590;19023716;20309742;20070926;20572611;19412802;20188393;19689028;19615346;19712604;20386875;19781496;19489527;19774732;19614950;19646190;19562586;19893850;20046918;19913949;20686593;20212559;19762171;19926963;19489088;20151757;19891380
|
||||||
|
20246341;20645547;20589849;20529221;19967356;20618682;20876694;20032458;19974064;20599743;20591587;19901733;20382850;20517060;20647162;20622824;20031862;20422141;20213164;20349289;20218022;20237509;19904801;19795006;20571097;20450731;20753831;20127091;20183450;21302257
|
||||||
|
21287819;20618548;20461699;20574868;20578554;20401931;20510822;20757882;20913996;20649601;21035622;20756596;20515677;20567528;20709404;20674035;20389942;19847453;20834371;20524539;20334530;20054003;20593492;20736531;20776006;20608813;20379463;20154425;20626083;20450469
|
||||||
|
21376070;20888662;20654806;21170751;20890223;21652227;20804504;21091722;21338010;21125587;20891922;20842756;20929223;21067982;21601169;20945332;20584919;21136763;20699583;20974317;21184996;20733699;21366258;21218672;20131232;20656524;20347443;21098383;20289950;21268474
|
||||||
|
21419195;21229916;21157495;21498267;21406278;21126042;21764673;21458117;22251670;20526503;21323072;22116836;21245430;20783492;21854692;21127138;21227062;20781245;21050868;21315884;20863924;21850031;21161752;20947974;21303204;21123014;21111241;21022739;20546803;21901316
|
||||||
|
21270839;20840723;21564008;21655105;21684231;22522750;23000188;20948078;21386491;22054740;21124150;20930692;21479539;21148375;22208134;21658864;21699153;22037921;21402145;21420139;21648825;21452090;21663952;21176714;20913272;21200970;21575106;21760947;21787388;21680361
|
||||||
|
21879606;22884691;22164930;22842707;21907229;22608529;21860466;21766882;21565890;21863851;21830967;22018031;21764948;21750949;21551080;22000522;22632461;21722692;21981043;21788088;21901699;21998727;22042241;22059163;22232309;22550695;22562321;22165686;22503462;22171718
|
||||||
|
22066853;22174493;21749586;22339113;23047528;22546513;22574397;22251257;22137676;22202602;22200247;22148998;21534043;21809478;21920654;22367421;22229272;22542209;22109918;22253760;22421140;22414309;22602051;22429837;22227333;22615127;21911791;22565441;22115284;22685487
|
||||||
|
22421545;22804651;22910827;23188095;22490249;22861850;22787937;22648786;22822924;22500898;22056202;22566466;23120559;22607202;22798172;23505245;23001566;23402815;23013880;23129363;22621838;22102969;22276658;22584393;22815203;22990641;22358873;23214495;22224711;22753268
|
||||||
|
22626501;23479076;22948646;23007791;22908408;23306942;22913104;22141056;23761541;23192314;22742332;23163128;22712482;23130043;22224985;22793057;22919193;22239713;22496442;22983798;23749552;23493044;23366939;22456039;23154364;22763365;22797090;22596782;23349943;22874350
|
||||||
|
23462941;23551714;23129413;23035400;22810042;23229345;23274653;24059385;24130893;23078690;23094101;23069633;23199475;23926726;23525807;23537791;23730804;23441370;23960642;23639446;24058208;23009903;23938362;23503368;23975444;24290536;24330333;23660423;23258322;23514008
|
||||||
|
23238594;23426296;24085104;23391675;23893902;24189574;23088487;23649617;23732798;23658013;24151329;23685265;24339233;23233248;24107953;24096801;23776910;23478110;23359981;23511493;24031903;24114692;24319289;24327544;24323777;23747519;24177704;23525378;23605012;24159757
|
||||||
|
23531660;24170077;24262045;23877341;24120316;24368881;23753505;24365582;23676426;24856955;24431579;24332687;23930408;24264596;24154371;23535881;23501123;23594344;24315984;23812075;24685568;23580262;23575816;23747298;24271643;25035446;23723431;24200936;24501529;24107934
|
||||||
|
24430431;23545092;24306027;23636389;24874248;24606850;24111588;24440154;24503067;24354739;24405066;25013325;24065858;24573853;24234184;24087460;24551538;24689056;24431595;24224674;24767067;25312291;24800388;23529213;23827802;23948395;23917423;24445437;24271389;24347367
|
||||||
|
24237084;24129554;24540050;24210662;25243295;24792560;25602208;25071268;24287989;24379797;24586365;24956985;24320118;23777907;24060585;24770422;25252435;25281051;24691197;24721646;24361829;24952062;25138373;25018379;24699371;24598434;24216445;24368869;24926077;24494972
|
||||||
|
24953289;25014076;24477076;25669166;25319058;25222280;24970702;24996302;24652626;25012382;25272497;25444140;25390664;25524161;25190105;24707252;25626230;25175566;25095578;26052362;24435628;24951278;24948844;25119654;25000834;24651317;24205182;25015172;24824692;25097040
|
||||||
|
25350773;25854477;25496305;25708623;25962014;25905984;24884585;25943657;25949137;25418477;26114407;25414740;26334252;25692748;26297060;25906170;26234849;25883408;25355353;25240080;25979662;25248407;25098194;25239437;25267952;26022994;25855499;25564593;25739314;25530076
|
||||||
|
25516170;26149819;24801566;26388710;26163454;25696148;25749311;25470971;25637715;25904361;25430123;26545932;26026618;25864401;26946728;25575491;26355942;26017868;25358033;25809353;26302256;25857806;26397030;25807156;26758028;25511154;25789493;25466606;26129611;26344808
|
||||||
|
26164908;25441036;26359416;25864054;25576206;26202940;25279281;26041830;25245004;25651461;25947504;25379451;25859493;25979114;26209578;26315515;26520261;26288643;25564479;25786499;25941590;26026384;25401823;26417410;26027815;25929065;25953020;26380398;26096537;25721410
|
||||||
|
26274052;25825664;25899166;26458657;25943026;26495538;26623405;27171665;27018088;26904008;25609019;26300999;26646097;26528540;26516567;26153533;27709938;27290253;27118931;26600698;26784523;26938804;26383687;26765395;26173329;26364358;27696785;26853144;26759974;26207212
|
||||||
|
26801992;26654017;26141084;26740434;26655890;26569773;26886515;27067606;27011287;26925411;26718389;27123483;26565915;26459889;26690737;27155124;26841789;27636476;26832148;26209815;27470282;27465924;27252729;26640595;27143638;26099537;26448732;27136903;26688255;26357455
|
||||||
|
27219092;27119309;27477463;27030167;27916724;27400143;27497461;27638915;26870919;26794028;27429690;27134948;26505170;27079520;27404178;27165655;27004504;26961670;27416940;27293393;26904341;26229421;27636095;26882474;27245799;27368094;26366535;26638974;27124342;27519297
|
||||||
|
50
thesis/src/performance/perf-3.csv
Normal file
50
thesis/src/performance/perf-3.csv
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
11437553;12137288;11705973;11537837;11461139;11571642;11701964;11450287;11834551;11375463;11610546;11299384;11145456;11730529;11972747;11874788;11897502;11221133;11344952;11289504;11980612;11604785;11504719;11530380;11226421;11531160;11329030;11852313;11674769;11444494
|
||||||
|
14052111;13837816;13712043;14281615;14470630;13896089;14591464;14230315;14021490;13961474;14399542;14621763;14635017;14460470;14763266;14216498;14278158;14626700;14582254;14175738;14438316;14187962;14138766;14039924;14952331;14172821;14599146;14835293;14374682;14200464
|
||||||
|
17180853;16873828;17011415;17355560;16830614;16936990;17964549;17074857;17280515;17191863;16955797;17453460;16955947;16579659;17330871;16592011;16405319;16557464;17039814;17358874;17151432;17186490;16937910;17036960;17280212;16685078;17172111;17030979;16615134;16789240
|
||||||
|
19559451;19984383;19635217;19407266;19659554;19931410;19880672;19397317;19969575;19421805;19686767;19151131;19799484;19897725;19518080;20147758;19439328;19408539;19417023;19211726;19635145;20026704;20036301;19594486;19359381;19508690;19531626;20538111;20122376;20501600
|
||||||
|
22673304;22863539;22522811;23175153;22944064;22974694;22554501;23137800;23061091;22917032;22392427;22446752;22150139;23130666;22584358;24296681;22297563;23217412;22190787;22827017;22514323;22286831;23013738;22909135;22066134;22109580;22461178;22215465;22465566;22518709
|
||||||
|
24633079;25499957;24937357;25002964;24940682;25930587;24968254;25745477;25071175;24949520;24693835;25110131;25243647;25021367;24826671;25022330;25069630;24725314;25438013;25142001;24575003;26924579;25072195;24960960;25134295;25299685;25030985;24853301;24654746;25053348
|
||||||
|
28130121;27484651;27717641;27720268;27719094;27850480;27821792;27566949;27564944;27422129;27966131;27510378;30901409;27467031;27666943;28069777;27371489;27533772;27648705;27978071;27329076;27794244;28271839;27735350;27946159;28004462;27631411;27946079;28357744;28346632
|
||||||
|
31916398;30874042;30560926;30122858;31020925;30691068;30620089;30693031;30123961;30588008;30933847;30630911;30825789;30592224;30957672;30396235;31646754;30695544;30152924;30236937;31144774;30175918;30133956;31103111;30702616;30250280;30994671;30135969;35398228;30146549
|
||||||
|
33063722;32608798;33106303;32687080;32871667;33156831;33353378;33551812;33303542;33307269;34485338;33969591;33520282;33113856;33198198;33258404;33073678;32972502;33033731;32939778;33513197;33874386;33941565;33179903;32790299;33128083;32881665;32936652;32956900;32976960
|
||||||
|
35733239;36589177;36119425;35501641;35679444;35479347;35264081;35347661;35915019;35835455;36195341;35658924;36278979;36103953;36223334;35753275;35600646;36509577;37795394;35443576;35743815;36194025;36416194;35971185;35369361;35858364;35442951;35755757;36375254;35791305
|
||||||
|
38455195;40675369;38593493;38820672;38832175;38733724;38568865;39371447;38565569;38318200;38532215;38642398;38691582;39053292;39167543;38712963;38749214;38704296;38358918;38514779;38743210;38531102;38450204;38016065;38218335;38061152;38396011;38266387;38714844;39130608
|
||||||
|
41260687;41116738;42772770;41332754;41453941;40879423;41355168;41664365;41384434;41680757;41020370;41345069;41191159;41797288;41554951;41011081;41525284;41129297;43168642;43124056;42570976;41318925;41287713;41467169;41616399;43784852;41358830;41384780;41539400;41331547
|
||||||
|
43887910;43786084;43796894;44328331;43863654;43562611;44375322;43685027;44487118;45235525;44454054;44404147;43700476;43387921;44037719;44612981;43646421;44076363;43721147;44268212;43635151;43996537;43629377;43873448;44448289;44869814;45086122;43906721;43866314;43957600
|
||||||
|
47081329;46615648;46317242;46423997;49226246;46928152;46808214;46394610;46678108;47322454;47181998;46318663;46635283;46699489;46723866;46911076;47165589;46265023;46530316;46763761;46930163;47184414;46982684;46927344;46551657;46314521;46543213;46804327;46619260;46449491
|
||||||
|
49360829;49080216;49606433;49209497;49348115;49038846;49306092;49427658;49762796;49375115;49305872;49387830;49570213;49321764;49356981;49098692;49459639;49747156;49663033;49234154;49096528;49028184;50306755;49543880;49199785;49355885;49388328;48845569;49220413;49184504
|
||||||
|
51791483;52024023;52253892;51829105;51764530;53598416;52265276;51778407;53413116;51938787;51925591;52400478;52263914;52135906;51953143;52180396;51803613;52839647;52556948;52973013;52037665;52590693;54354097;52489077;51989912;51911949;52414783;51897533;52177311;51613724
|
||||||
|
54520289;56763769;54800159;55804943;55563116;54750403;54456788;54700199;54666321;54888452;54830589;54565879;54575947;54934961;54984325;54888531;55045554;54423833;55031497;55065062;55752029;54929008;54458649;54832572;55379218;54198676;54562030;54571487;55155616;55041036
|
||||||
|
57403491;61360128;60245045;60131735;60578760;59604945;57957129;57441702;60410924;61600081;61410914;57923132;56944230;57829331;57200029;57451470;57297742;57412694;58289946;57219235;57230231;57202057;57474173;57310045;58022873;60322257;57861670;57238716;57883773;58071766
|
||||||
|
60543173;60673795;59943981;61169583;61514610;59962490;60188647;60125735;59875760;60634589;59756351;59642771;60559092;60368753;59993208;59989019;60400469;60776701;60728438;60741021;60013355;60294244;60020348;60369511;60048061;61895269;61545276;60353639;60072075;62974103
|
||||||
|
63488988;62519937;66149160;63213949;62802343;66779940;63018620;62609180;64066214;62967290;62680236;63177045;63546540;66189017;62640037;65891321;63143110;62630519;62877817;62573208;62504666;62023286;62924488;63180812;64357116;62659373;65953339;62570373;63798725;62384852
|
||||||
|
66052841;65917870;65459074;65569088;65579084;69305787;65232304;66010482;66095967;65516122;69488350;69094077;65468610;65257836;65774861;69780301;67196438;65366252;69208777;65280334;70427422;70521213;66344530;68209795;66555388;65032023;65587407;65550798;65634437;65291073
|
||||||
|
68501387;67832602;68153413;68002713;68116143;67896698;68173479;69902754;68333661;67688274;68299466;68620425;68016638;67808416;69448446;68217935;68207086;67859955;68122242;68285167;71131080;68465664;68914793;69081301;68034391;68059027;72513045;68443511;68351152;68550737
|
||||||
|
70878105;71087576;71047432;70652237;71406754;70828706;71951278;70846993;77804496;72334806;70716800;70657838;71129910;70542802;13929749;70969078;70786134;71058670;71002121;70808496;72302503;70595305;71111111;70725626;71135959;71274717;70933729;71379349;70909141;70957324
|
||||||
|
73617504;73809576;73454560;73449059;73222250;74701359;73250284;73544693;73382952;73301792;73828901;73430832;73607456;73278678;73889030;73419952;74223506;73333783;78359227;77982976;73177831;73643270;73844298;74274139;74607836;73749279;74388880;73574941;73438093;74146772
|
||||||
|
79041965;76523030;80680800;76629641;76074887;76863821;76306996;76602045;76280307;76051541;76838863;78017389;76434721;76412038;79171128;78112522;77423541;76164839;75988467;76106275;75944594;75881102;76556294;78392596;76493292;76886402;76269179;76939505;76119800;76739961
|
||||||
|
78910282;80878046;79312839;79698905;78823353;78698642;79390488;78927934;79679146;79027477;79353466;79549035;79125105;79162686;79342054;78882566;78616572;79392060;78897985;79300758;79000202;82011014;78897383;78629624;79059275;79558149;78750439;79127241;79545695;78607877
|
||||||
|
81698198;81573605;81910281;81882061;81815344;82059455;81529336;82490099;81801832;81704734;87907268;81392551;81965241;81932209;81701017;81436916;83201723;82253364;81395674;81845161;81757911;81968275;87384319;81704230;83904413;81715952;81580428;83449244;82034788;81417037
|
||||||
|
84138344;84317811;83946526;84911933;84799757;89920444;84897932;84399245;84377436;84672734;84252602;83950232;85081020;84661936;84857778;84355482;84479027;84550480;84492742;84378262;84361718;89948016;85073732;84449360;84469807;83948242;84360447;84669888;85018996;85072991
|
||||||
|
87088205;87007042;87208915;91964769;87832598;86912434;87452250;87269412;87505275;86657532;87335541;87138874;87179747;87299094;89635265;88185575;86935936;87690891;87265814;89485912;88536278;87124248;87155912;86726940;87473226;87323415;86931771;90220263;87226452;86811078
|
||||||
|
89964990;90485081;91126193;89454746;90217168;90451379;90002450;89488081;91905316;91897480;94958011;93163466;90223382;90264902;90560531;90640420;90042245;89582606;91379488;96286627;90112726;89809288;89784838;90572518;90932341;90046461;90242333;90069576;92937597;95463352
|
||||||
|
92198119;92678169;92719411;92484921;98576707;92895039;92532575;92250403;92543948;92752510;92550961;96821055;92963694;93913591;92913877;92714477;93800305;92437457;92631922;97139543;94559271;92620280;92261362;92156705;92375176;92250764;92515021;92334167;93278515;92789330
|
||||||
|
95306679;102224623;100803820;94847204;95229627;94872917;95673893;95456479;95537320;95042066;95049909;95089548;96125924;95241239;94927256;96328468;95749526;95591606;95767733;95438207;94923178;94979457;95936239;94700755;95175536;95051642;95164395;94948626;95360677;95142665
|
||||||
|
97825494;97995314;97830597;98410006;97892946;98565410;99683413;97844186;97596816;97658969;98088616;98206421;97928358;98491839;98613813;98682460;98103920;97971401;98772227;98208426;97938935;97438572;97575451;98192362;98171485;98276141;97779043;100756784;98510874;97360856
|
||||||
|
100177976;100863650;101059730;100747751;100671157;100442295;102518422;100120780;100911331;100318114;102784093;100326714;106685654;100436805;100842631;100467237;101138824;100056593;101416796;100706017;100503425;100331192;101535407;100518940;100701003;101046269;100762087;100004494;100392285;99949598
|
||||||
|
103659664;103703692;103505039;103464379;107885471;103119869;103042567;103255645;103725726;103274191;106699424;102669005;103579170;102766820;104859222;103321005;105097135;103660200;103103627;106373921;103517530;103156918;102955869;103518802;104720963;102579912;103115023;103358668;103682441;103468790
|
||||||
|
106393849;105882425;106216161;107961320;106368726;105736686;105543494;105889340;106280985;106464075;106646517;106295524;106534880;106463920;107444505;106267764;105890607;106679806;106030352;105964845;105862502;106452205;106124817;105964244;106280854;106365271;107278722;105833152;106567844;106261335
|
||||||
|
109269869;108837464;108690398;108374735;108849334;108075096;108793970;115599432;110294210;108664137;109038898;108971153;108852591;108591836;108626777;108139479;109052247;108972815;109499901;108570640;108957286;108452922;113194421;108495450;109000384;109055199;108533313;108576932;108551344;108811360
|
||||||
|
112161635;111592570;111830724;111956071;111365732;111008363;111979520;111581069;111002305;111382688;111775398;111224502;111766086;111136272;112114437;111367647;111121692;111139533;112168077;111969706;111692782;111302519;111560999;111548343;111686699;111451721;111290094;111694625;111393493;111536231
|
||||||
|
113987748;114823012;114668634;114195931;114514503;113754185;114194838;114041197;114527409;113979236;114393656;113870843;113995622;115648136;115465456;113882070;114829232;114145665;114579659;114416124;114350555;117028233;114255345;115912166;122138775;115464873;119968797;119368027;114217952;114088870
|
||||||
|
122281891;116188131;123831535;120096723;116806838;116520957;116816975;116480627;117563556;117073632;117131634;116768275;117319565;117927866;117274865;116783454;117259399;116450129;116961050;117411701;117157863;116614225;116620683;116915088;116786006;117888700;117065685;116408463;116499999;116434329
|
||||||
|
120671303;119979013;121068561;119735830;119761537;118959981;119817720;118852055;122775025;120304582;123551741;120185550;119512252;119301499;119470529;120244567;119537389;121244263;119595263;120259791;120104053;119119766;120140118;118894700;119369498;119154391;119669806;119501218;119393583;119876822
|
||||||
|
124588826;125298956;122851122;121624281;122237231;123479795;122845960;122262533;122248976;121773159;122476146;122540432;122579059;122035253;122249769;121811048;121914444;121915561;122731008;123818893;122019586;122439793;121941475;121906620;122718561;122210181;122642623;122291676;127732069;121785173
|
||||||
|
124751022;126168468;124675648;125099334;125016642;125104474;125047253;128731621;125276912;125304085;130987950;124932750;124865513;128454368;126041389;124760871;125228115;124841077;125350303;124675310;124968912;124484638;126466476;124992822;124888686;124838209;125030169;124692691;124644911;126494173
|
||||||
|
128090412;127540404;128333074;127477139;128083354;127879288;127978521;127652572;127484846;127469334;127562730;127995296;127715547;127674675;128658003;127711237;127549564;127553205;127516346;127691128;127899502;127562564;127939499;127660526;128278953;127031534;127626006;126978338;127763640;126990300
|
||||||
|
130521998;129971811;131005082;130752424;131420143;130728480;130364639;130017042;129991445;131060302;130581466;129792603;130421211;130121477;129854093;130708886;130070400;130276734;131224078;130520572;129616847;130693720;130305798;130290623;129817319;133300358;130981772;130908105;130157302;130318357
|
||||||
|
132921722;132690700;136041971;132620017;136884086;132726826;133381245;136449684;132851956;135201007;133494545;132688777;133587585;132593265;133124373;133102915;132851296;133363139;133588787;133018724;133768524;133045656;133141910;132710238;133437916;133414394;133249836;132923109;133280805;132724112
|
||||||
|
135693784;134918568;135865296;135185920;135435674;135137053;136169330;135375265;136131092;135284690;135676710;136040274;136133191;135762639;136469504;136490275;138371907;136326994;142122876;135062735;135637534;135253187;136520163;135199840;135566064;135461397;137804905;135693977;135519648;135959504
|
||||||
|
138320225;139347612;139673130;144319460;139359929;138302501;138575901;139022991;138720982;138644756;138778494;138495324;139391044;138770042;139372174;138462575;138810657;138728456;138821644;138372360;138841583;139172984;139979859;139307752;138892870;140890737;143763427;138783397;138905511;137853849
|
||||||
|
140941339;140522473;140647083;141018932;141341488;140649678;140732198;140825239;141908935;140976646;145911632;145443610;141400869;151699717;150322036;142178208;141074731;147332023;141083139;142282576;141301386;142784010;140988140;142091094;140815764;140951936;141218633;141008501;142237955;141411392
|
||||||
|
144688882;144428567;145446474;143924448;144131789;143830104;150076733;158397578;145531892;143757389;143596411;143203293;144359936;150219644;145122741;144091119;143725782;143768652;143762671;143538063;143773341;143974804;153742275;144117976;144011754;143543591;156212968;143708100;145168034;143216733
|
||||||
|
50
thesis/src/performance/perf-4.csv
Normal file
50
thesis/src/performance/perf-4.csv
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
11991752;11662537;11463378;11852468;11206774;11826767;12029693;11642055;11809993;11439769;12055023;11727250;12413903;12313005;11517920;11797774;12767532;11596713;11513872;12182818;11637291;11987476;11542735;11959600;11639164;11835267;12152658;12376164;11616427;11401919
|
||||||
|
13252705;14236318;13790236;14697879;13112401;13657877;13516679;13505860;14992202;13269414;13639707;13298150;13338970;13351622;14429821;13063400;13263510;13427341;13451679;13605448;13201368;13288739;13270883;13371309;13304498;13550408;13388502;13331521;13786869;13244918
|
||||||
|
15631533;15557938;15034976;14966362;15448203;15502660;14894921;15022410;15239131;15344056;15245513;16788428;14606876;16325854;15170757;15066864;15044469;14920196;14972128;14932138;15378069;15413677;15515517;15438927;15832146;15775324;15461428;15028073;15263573;15080504
|
||||||
|
16912332;16703163;16700517;16647022;17023979;16937801;17009170;17338744;17151237;16920615;17282479;20078109;16623473;16890894;17134891;19672636;16661235;16554358;16782491;16909007;16956092;17171137;17076262;17136871;17668638;16993400;16751788;19667932;17021344;17094086
|
||||||
|
19215666;19164797;18397699;18807649;18566136;19215183;18733272;18797779;18852745;18291258;18668413;19089145;18606762;18604157;18550793;18531434;18371772;18561141;18982925;19161843;21505769;19096826;18266835;18546190;18726881;18554554;18795655;18616395;18602377;18794091
|
||||||
|
20554526;20222738;20258429;20339157;20939867;20674098;20794973;20723503;21287623;20546987;20559611;20504734;20163358;20275897;20351224;20285506;20797656;20835026;20487838;20347875;20383743;20197310;20792330;20550167;20851596;20609652;20599813;20780065;20930217;20619420
|
||||||
|
22281372;22459890;22198940;21988399;22692701;22467172;22541687;22038937;22045639;22611953;22039397;22499734;22256420;22262148;22372543;22479802;22323276;22443570;22034261;22073508;21955097;22446455;22179493;22496442;25227528;22280508;22138030;22132400;22133181;22379700
|
||||||
|
23737349;24181954;23613335;24170682;23864124;23889644;23949150;24359861;23734689;24064393;24553905;24128194;25096813;24120929;24187168;24529064;24156208;24249038;29326920;24199943;29457555;23582239;24900272;24055508;24211302;25001882;24267320;24662729;23974698;25125611
|
||||||
|
25932063;25865423;26053340;25771992;27251497;25968235;25873777;25425532;25539936;26031213;25500315;26230480;27258664;25651740;25839156;26133820;26158688;25614887;25871629;26280272;25602080;25945068;26602630;25725610;25929458;26161870;25748922;26065852;26086080;27011353
|
||||||
|
27655940;27705396;27895777;28003718;27734373;27508490;27168116;27714123;27665454;27903187;27664662;27342604;27744236;27936089;27727161;27640152;28376296;27467526;28949474;27746758;32641239;27236453;27352387;27598407;27436752;27487570;27580049;27910923;27715663;27586150
|
||||||
|
29266148;29074931;30671002;29125708;29649519;29798799;30095156;29433476;28876951;29405681;29309331;29614918;30780726;29317135;29787943;29224123;30093688;29817761;29906463;30494038;34020568;29470742;29412248;29433228;30639137;31467901;29334364;29600543;29411222;29323292
|
||||||
|
33000655;31888055;31535349;30799565;31378283;31237768;31351851;31103626;30731392;31076983;31246633;30946638;31421469;31289986;31696518;31142037;31134259;30631120;30883292;30939991;30521446;30885123;31125060;30784828;30944299;31408260;31067660;31253398;31062526;30872255
|
||||||
|
33163006;33164360;33291365;32651819;32645126;33446867;33515719;32432640;32572582;32724608;32444523;34104496;32883388;33383330;32685681;33031593;33779740;32809664;32563931;32585392;32782085;32745633;33467287;33361079;32516836;32971961;33100633;32724840;32612591;33217529
|
||||||
|
34800792;34578740;34435731;34921085;34641079;34419837;35139631;34813380;35147413;35215866;34921922;35419509;34291622;35660127;35133032;34776105;34802919;34607988;35159923;34710366;34908583;35679543;34439758;34655871;34204248;35305181;35873889;34241259;34520993;34647069
|
||||||
|
36146918;37709119;36414077;39808115;36661157;36509422;36796871;36440306;36414004;36307868;36589737;44952809;36372021;37156368;39532296;36732022;38844536;36224361;36315136;36667990;35968539;35948072;36382604;36281146;36932697;37180549;36435718;38765553;36237992;37632938
|
||||||
|
38243105;37912771;37999209;38667159;38257885;38905352;42631595;37919646;37694143;37799227;41668357;38081557;40770970;38445593;38823889;38015785;38110199;37875460;39209747;37959603;38537830;38453024;38152719;38242354;38221844;38097072;39114299;38866626;38027853;38054214
|
||||||
|
40608449;39749933;39798342;41051853;39863213;40586119;40009442;39928609;39921111;39539959;39720571;40336179;39904338;39983402;39750235;39818741;40726066;40121301;39833078;39802528;40264568;40633096;40921404;40159371;40131496;44850528;39978718;39637672;40067169;39951163
|
||||||
|
41586394;42093099;41671888;41959347;41799866;42132695;41821418;42070973;43086400;41365280;41448372;41473810;42823097;41183096;42950071;42183994;41749384;41989441;41542901;41497112;41988003;41488574;41442334;41656581;42068211;42697866;42505532;41365763;41577261;41567285
|
||||||
|
44181668;43508759;43189198;43382274;43366142;43292910;43439334;43561783;47628234;43066417;43563834;43693005;43670130;44085849;44211482;43131103;43804861;43526638;44317796;43842199;43291258;43972126;43175463;43626941;43684382;43308219;43517716;43756460;43179608;43261377
|
||||||
|
44875247;45049996;45591569;45446538;44898813;45430194;45511273;45134039;44938105;45919294;46261589;45268957;45423392;44935246;45667201;44745118;45296018;45751944;45780900;46028240;45323207;45561524;45150803;45690362;45308278;45279422;44808526;45532412;45371760;45159637
|
||||||
|
47216047;47267457;46809567;47268018;54110817;47133604;46744687;46691634;47026987;47791535;46808440;46765365;47108873;47440566;48904875;47182914;47222603;47089473;47455515;48312932;47018544;47156632;46907427;46919510;47138143;47406406;46982701;46939006;46922284;46698979
|
||||||
|
48444744;48588955;48567422;49765301;49008709;48878845;48870662;57227571;49119092;48407217;48423980;48368691;48902660;51083560;50959338;48762742;49146061;48291258;49586853;48871956;48157026;48798172;49228686;48985356;49131469;49503592;48727972;48499117;48893776;48899004
|
||||||
|
50160508;50865949;50339635;50141741;50589181;51008375;50406855;50426212;50406233;50975168;50659097;50222886;50263487;50087912;50591640;50637048;50710623;50095905;50328257;51146317;50324973;50481624;50281935;50459581;50909816;51513699;49872486;50875666;50270701;50756573
|
||||||
|
52275587;52533329;52166414;52649855;52259445;55665698;61735900;52463913;53632375;52735991;54062471;52876765;51907761;53382906;52598825;52509798;52658337;53649934;62502548;54009694;52192169;52494697;52292058;58633315;53427466;52542425;52338831;52668952;53086725;52337827
|
||||||
|
53638437;53935213;54664377;54032722;53991792;64429984;59810741;55173536;54420162;54916677;54279319;53917454;54004022;54294567;53967572;54394702;54270981;53660243;53877667;54436442;54015915;54555531;63175137;53976068;54112660;54215689;54086771;53748239;53994018;54206699
|
||||||
|
56251175;56680125;56214983;55562104;55713908;56022487;55783092;55879208;56419035;56171977;55769423;55743533;56024328;55800200;55751317;55855066;56350970;56519429;55519293;56003545;55601443;55454718;55818696;56018263;55818164;56266376;56320792;55341496;55975949;56601056
|
||||||
|
58516408;57321414;58116640;58468882;58062446;57293380;58067612;58086752;57819118;57816422;57471612;57447985;57677250;57229109;57685028;57782003;57600520;57873165;59280244;57847748;57772232;57896234;57524551;58318753;57290945;57517626;57597330;58554870;57396920;58828349
|
||||||
|
59424327;59544681;59614196;59712858;59593055;59900393;59401353;59757084;59244137;59631741;59419858;59318813;60004405;59741684;59762495;59261829;59407674;59851745;59244889;59825785;59452487;59346853;59435634;59148165;59120632;59269500;60028283;59951696;59225875;59643806
|
||||||
|
61487409;61665083;61230248;61297148;61443268;60863182;61334149;61005259;61973049;62868068;61443697;60958147;62415865;62319441;61218171;61680068;61466310;61606682;60610419;61007328;60733648;60946571;61022007;61354743;61392885;62605382;65893763;61962814;60798111;61452072
|
||||||
|
63441265;63824379;63173968;63098218;63959722;63578601;62697428;64080104;63218720;64974131;62860323;62939587;63308383;63452524;62829252;62709947;62044069;62873456;62504319;63288512;63013157;63024318;62938391;62672343;62795903;63171874;62667393;63713937;63235687;63272732
|
||||||
|
64234376;64731647;65341718;65502688;64776479;64194476;64882210;64644661;75375878;64938292;64923811;64350157;69649753;65079172;64178984;65116385;65472989;64934422;65764113;64516920;64972495;65038663;65076628;65094321;64617202;65040246;64203028;66072854;64186418;64861827
|
||||||
|
66532452;66780765;66771847;66277140;66117209;66516840;66360407;68608503;66177870;66470230;68157910;66499856;65983398;65876313;68558394;66347260;67215396;69279473;68133858;67026590;66578955;66580910;66752743;72550246;66090276;66346704;67024219;66237481;68144816;66099297
|
||||||
|
67788063;68137601;68267073;68601441;68751183;68306890;71861764;68460577;68182747;68239406;67834449;68389065;69790518;68128629;68491224;68546972;68102889;70115289;69135555;68528767;68264043;65534088;68579866;68626125;69562024;68325951;68403593;68050435;72033662;70016616
|
||||||
|
70026963;70135995;69837205;69948252;70429203;70144701;70402381;70351342;69789440;70252203;70221668;70138257;70267940;70089270;70013322;70269660;69974958;69680114;70437370;69942203;70042207;69891171;71440428;70750632;70072916;69647960;69998030;69935228;70911053;71024874
|
||||||
|
72247899;72216394;71748398;71981600;71831789;71595400;71791837;79429147;71686576;71564069;71837074;72121559;71613824;71415245;71584934;72394707;71670112;71810273;71489852;72038305;71180739;71741830;71745758;72344700;71957368;71934333;71839078;71906169;71947469;72193366
|
||||||
|
74331839;74103827;73206144;73624695;74356215;73986407;73381742;73806949;73766512;77024158;74022139;73726490;73686997;74001734;73631825;73860489;75661487;73309207;73213392;73062749;73315339;73213151;73943734;73866132;73701338;73518252;77160275;75387391;77207747;73596944
|
||||||
|
75120809;75268941;79779276;80383084;76133930;75203763;75453084;75497654;75497804;75457415;76756006;75334968;75608758;74785338;77410858;75719439;76493177;75106892;75144916;75343832;75286715;75378745;74878252;76022339;75438785;77711298;74826424;75037235;75622491;74985700
|
||||||
|
77362718;77300589;77624017;77674535;77827149;77169791;76701845;77603283;78120969;78429270;77785317;76792259;77002197;76898285;77351996;78477321;76599284;77187205;76598121;77543648;77769184;76894227;77561921;77229427;77151676;77233746;77011803;76731641;76751326;84233509
|
||||||
|
79303763;79491547;78943575;79638412;78637768;79230299;79075973;78791546;78670832;84134371;78827525;78802200;78575705;79148105;78644659;79182116;79050918;79452269;79199382;79208305;79095744;78402732;78777985;78899334;78631929;78679799;78872679;79267007;78598055;78794959
|
||||||
|
80897167;80452838;80730574;80785807;80483141;80583719;80727084;80237400;80626867;80982788;80649200;80421463;80652046;80832708;80383658;81142766;80506488;80310044;80403470;80717713;80793645;82103507;80613515;80515416;81158324;80403468;80526547;84847498;80992558;80932043
|
||||||
|
83067882;82476004;89476805;82858000;84181452;82020001;82074595;82560586;82646738;82687865;82113430;82729040;82678009;82686017;82439744;82569450;82523715;82633205;82316106;88791776;83289026;82159748;82373199;82233108;81895130;82472382;82197992;82763536;83112453;84346521
|
||||||
|
84512715;90615380;84245642;84364239;89173816;85740944;83956417;84170164;84504440;84312263;84299912;92272935;84477402;84015782;84136456;84753357;84774618;84894419;83985306;91726952;84701616;84699440;83785557;91937309;84169645;83751972;84132591;84537602;84394710;84339809
|
||||||
|
86044226;85992306;86462305;86146365;86229834;85826072;85768889;86148811;85865184;86109943;85931509;86704213;85857574;85678645;85725623;85772761;85710063;85970463;85979581;85395101;85933348;86170625;85704918;85390121;85774681;85381893;85803244;85760072;86346947;85959763
|
||||||
|
86702559;87313900;87881467;88310189;92527407;87516942;87791610;88444903;87386815;87347462;87649859;88295545;88368694;87469516;87796957;87992488;87534226;87685388;87981719;87245150;88119191;87772279;87589938;87881587;87971280;87587191;87466209;87648575;89057251;87554198
|
||||||
|
88924359;89014914;91178270;89334165;89125210;89059989;89824578;89845010;91063681;89362398;89473754;89696872;89408245;89414717;89571583;89608775;89328615;89878145;89199632;89132464;89426661;89499934;89791237;89754283;89444613;89182663;89990807;89744814;89875654;89333129
|
||||||
|
90943786;91251061;91705715;91046551;91099069;91140168;91221753;91039669;97214624;91221199;91131368;90934316;91432858;91453232;92144140;91451034;91832102;91431745;91679343;90889223;91422180;90962979;93149536;91892474;90957064;91783300;91718036;91345624;91050391;91383521
|
||||||
|
92815971;95669183;93097565;92873260;93029734;93009548;92854980;96576517;92887523;93573291;94003113;92766844;93056509;92977489;98110781;93650482;92935272;93159298;93159784;93155672;93544232;93175352;93247460;92806077;92531217;93793156;92634290;92729917;93205099;92830116
|
||||||
|
95728490;96466662;94724755;94487421;94918826;95022630;95481265;94580232;94732412;94575332;95030826;95560589;95173362;94324383;94687307;94054696;94254046;95569201;94613673;94776201;94466991;95090195;94620189;94636320;94348557;94634383;95625575;94865152;94995423;94445926
|
||||||
|
96331303;96607162;96853043;96462259;96776934;96304575;96516575;96239461;96845504;97637686;96535543;96705375;96033818;97336163;96473726;96492757;95903636;96274049;96336297;97466373;99079357;96433460;97215031;96507153;97084894;96796513;101281352;96520733;98162289;96704387
|
||||||
|
97915162;97351840;97948510;97718809;98456091;98347874;98282431;98329761;98342433;98065233;98304711;100588957;99648323;97900491;98208683;98251062;97939208;98294813;98428392;98493329;98593246;101496978;98083376;98560131;104358638;98433476;98566993;99851942;98565428;98171815
|
||||||
|
50
thesis/src/performance/perf-5.csv
Normal file
50
thesis/src/performance/perf-5.csv
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
13622572;13051468;13095925;12945342;13356884;13055206;13531465;12814286;13043964;13449695;13303249;13379327;13261578;12912337;13658542;13114171;13320623;13093931;13274123;13263783;13845597;7108521;13084774;13711175;13856729;13002533;13144190;13722588;13259404;13010249
|
||||||
|
16613354;16087649;16349369;16448322;16951474;16161683;16759850;17038243;16348257;16186121;16572935;16076177;17043172;16433073;16303239;16394117;16342025;16325623;16898380;16467069;16134580;16353007;16034335;16669093;16057050;16616671;16293972;16396452;16764238;16569779
|
||||||
|
19543979;19540142;19332557;19761473;19466227;19659454;20171953;19865025;19956213;19851187;20080635;19905864;19906455;19330492;20089001;19812322;19788546;19644405;19375620;19543017;20151493;20259615;20920313;20331795;19522507;20520493;19888952;19599377;20488341;20161844
|
||||||
|
23351694;22687969;23798736;24163918;23657740;23144059;24094823;22596651;22802954;22975089;23150061;24120904;23301927;22581883;23355091;22843523;23997994;25033915;23114522;22966653;23550432;23033193;22654815;22695705;22496827;22431981;23032192;22928489;23051779;22992263
|
||||||
|
26870686;26306627;27097198;29707237;29526635;26295204;25770812;26097518;28083541;26116356;25892148;26067420;26521605;25895455;26176472;26373206;26755451;26284223;25707728;26317739;27324963;27794618;26280546;26676458;27129872;28031470;28134300;26546925;26967886;26809357
|
||||||
|
29423715;29693120;29487019;29498080;30052441;30800640;29841179;29501476;30368688;30126937;31832943;29197754;29224236;29767325;29153608;29752627;31028455;29415038;31336906;29932277;29605429;29829045;29993065;30032553;28966664;29247272;27118901;30263793;29791823;29220429
|
||||||
|
32154760;32377876;32456349;32697129;32624687;32348118;32394559;32440648;33043744;32638855;33242282;32647472;33406491;33213506;32719242;33230729;32715194;32781453;32804297;32791363;32737657;33708551;33284845;32071218;32525113;32679524;33029647;32795671;32742157;35060077
|
||||||
|
35908410;35699864;35456199;35468814;35612163;35918350;36259325;37486659;37110876;36433865;35661750;35718160;35715194;35530884;36183588;35310024;36098412;36426141;36063463;36291429;36015760;35730454;35991844;35875848;37427093;38957868;36243435;35673884;35977526;36490747
|
||||||
|
39887491;38749521;39013376;41040829;42470287;38850609;39364641;39382897;38519223;39022394;39441571;38973618;39442954;38556035;39533049;39608597;39357137;39313071;39459085;39436020;38932198;38690166;39261630;39553189;39560484;38410121;39260899;39549292;40444167;40023797
|
||||||
|
42495977;42392576;43299654;42350003;43178990;42396624;42713372;42383328;43491079;42075759;50776695;42882141;42590863;42496569;44734243;41930024;44205502;45305667;46179952;42146526;42726518;44367338;42857092;42262242;43367347;42079646;42190753;47466241;42376095;44373659
|
||||||
|
45209670;46375914;44762358;46361667;45386796;45456561;45515396;46019529;46207687;51697202;45591154;45390393;44571375;46397016;45072844;45933852;45355294;45640169;45693914;45210532;45971546;46628106;45825451;45673695;44643306;45714515;45256041;44902652;45441944;47710527
|
||||||
|
49131619;48472103;48002867;49753581;49407586;48379111;48826995;49280408;48883124;48036523;47718033;48691631;49595393;50638838;49418298;48805132;48495008;48945045;48087623;49033217;49800904;48636854;50098384;49632816;49330146;48655420;49330216;48638899;49051483;50294237
|
||||||
|
52102673;52218920;51817426;51940897;56952962;52235732;51092643;51247816;51817858;51696812;53100309;51730858;52053327;52131539;58700088;51483496;52005734;52825984;52364504;52558041;51209802;51120168;51558462;53913013;51902493;51513435;53206045;53969233;52276723;52180535
|
||||||
|
56340307;56302053;57469629;57441254;56964154;55476032;55860702;56343354;55847536;56911632;55529135;57125539;55692885;54537732;55492103;56742191;58799383;55275381;58614442;56168041;55204783;55724988;55895461;55553593;57900340;54928193;56165447;54856363;54548042;55989644
|
||||||
|
58416727;58021075;59125489;58419382;58065822;57638239;61770868;58849651;58022909;58013019;63528826;58296833;58351941;58324768;58793642;58091994;58092725;65033000;60926472;60141331;58682615;59088547;59666454;59446866;59219382;58433921;57496182;58591388;58603261;58332233
|
||||||
|
63359325;62200486;61418672;61952733;61899089;66339678;61818862;61597089;61452588;62784084;60525930;61276835;63110511;61023080;62080392;61757031;62227128;61163725;62200497;63064160;62153675;62183694;61428381;61516703;61574586;62177722;65392311;61451607;62512746;64735901
|
||||||
|
64595277;64688368;67218793;64104780;64015385;63743235;70296224;65548616;64350089;63767383;64632640;64848490;64755459;66148726;65864151;65544738;64251116;64891084;67764046;64807742;66133406;65804886;65352043;66721554;63754206;64693539;68620175;64597993;64414094;65552164
|
||||||
|
69482478;68437319;67282397;68094491;67174497;73166462;68094150;72845636;68290343;68379507;69109631;67913479;67018262;68402613;69541954;67852660;69393394;66816840;71185268;67980378;69014946;68014465;67559378;67556542;68388154;67908930;70011720;67924470;68491094;69310223
|
||||||
|
70962565;72069403;70761362;72807913;72102918;72510824;71001050;72387683;71291096;76940472;73221020;75844946;70801281;75598105;73752796;71933258;71207192;71717076;72183105;75151675;70339460;70909091;70903961;70861418;70642351;70678652;70322427;70942396;73165531;71584138
|
||||||
|
75287299;76363047;74328279;75408305;74937016;77055046;75074243;77561123;75502659;74046199;73559510;79007093;74409107;75272881;77523500;79125614;75529922;74208966;73590941;75724942;74825740;74084544;74140684;78166394;74697058;74627894;76464074;75280165;76801392;78086247
|
||||||
|
78075938;78202354;80179870;77770633;78085276;79019869;76740132;77986593;79956795;85945634;79989359;78808847;79465588;77416431;78372837;81247734;80383037;77953279;79203187;80481368;76737959;78187296;77754872;77405311;77425389;77714132;77583457;77173308;79439617;77923742
|
||||||
|
80595051;82478844;80352297;81944312;83944503;79530024;78634217;80353600;80111658;82518251;83887661;85427255;84292511;80011542;80534703;84993148;80681920;80899655;81112461;80480979;80136987;81782738;80960313;81036372;85660580;84079376;80473965;81226853;81093723;82220321
|
||||||
|
83207205;84334945;84309265;85290869;84986405;83760585;85174452;89507142;84073335;86404030;88646032;84994151;85152589;86792707;84141277;83681871;88791435;84548301;84161738;86718032;83356868;83518924;84969934;83348161;83251633;83074707;89510819;84071430;83805463;87259017
|
||||||
|
86102682;90399562;88043367;87659559;95273376;86947590;87377719;89403690;89406485;86845130;86830231;87054508;85889446;88021584;86052425;88607026;89547481;88715218;89702242;90340678;88616355;86842806;91853107;87246363;89122993;86954674;90312623;88085309;89511611;88692133
|
||||||
|
90385034;98742042;91701321;92086412;90949875;91055682;89904617;90849440;89790575;90257897;91355878;89506641;92341049;89808360;91614803;90710860;91856143;89910038;90222598;91273788;90803290;90570876;91336831;90940738;90940588;89852676;93210284;90712133;98174996;90303966
|
||||||
|
94368974;96012619;94343163;95231036;94494839;92740879;92988722;98712384;93113295;93990596;94426617;93774104;95812490;94728635;94153043;94244411;93048829;92587500;96120741;95144126;93932744;96425275;96126772;94617048;93431435;95364346;93929137;94206488;93588262;94536722
|
||||||
|
99565027;96761580;99778524;99509980;98232569;96573905;97757923;96543886;97465172;98553535;97904289;97475262;96739137;96349186;96883337;97443430;99263159;98907565;96850534;96076495;100650574;96284079;97891103;97623662;96056997;96474591;99497175;95579035;99146401;96503027
|
||||||
|
98925471;99786260;99730882;99494791;100633822;106028232;101593454;102457639;101029193;102119690;100458861;100264462;102238692;100390709;101232600;100047509;103263461;103730883;99476275;100176992;100330521;101192583;103271998;101887808;99734809;100616640;104505313;99457399;101667569;101743526
|
||||||
|
103457950;107902848;103541694;109332156;103724680;104202983;104820378;106967815;103042420;103787153;104232751;103801280;104136043;103123930;102208294;107328018;104725392;103034715;104831780;103532035;103097147;105236569;102391360;101480204;103106816;105860907;106394587;103641920;103507477;102790209
|
||||||
|
104360020;108875606;106381872;105480234;108378045;109550301;105815419;106254895;105864514;109186853;105822282;111819377;106187344;106318219;106780490;106094713;105785269;105865316;105853893;107582694;107813104;105775611;106040908;107545502;105959650;108734040;106328118;107414447;108061208;107897970
|
||||||
|
111100595;109640538;109355593;111930273;109515955;108271909;110745814;115038906;109038323;109628405;109584078;108943559;110770492;110034387;110386263;109001161;109164349;109439145;109601423;111516396;111959400;111495165;109237282;109777135;109593156;110132979;110975652;108438585;109254486;110293602
|
||||||
|
116521488;113936457;111686399;118259758;115161235;118658636;112544572;114400311;117431603;113817855;113687922;116080829;112527298;116100036;112718361;111368349;111679374;112850609;112959992;112877412;112958309;117635430;116568740;112470337;113503964;115166906;116037464;124832226;114424228;112868965
|
||||||
|
115790863;123623629;119068616;117349383;114768900;120919104;115155414;115693814;115516558;115230250;115509274;115747669;118800082;117084055;116734394;119117330;114972066;118168020;117552359;116338291;115609159;115908973;117256312;115595843;116720887;115481420;118908594;116418438;116493083;117063756
|
||||||
|
118715628;119089506;120132801;119821594;125412869;120587087;126841755;125893766;118296129;121295128;121081993;121617537;122328022;127671944;119616554;122593120;120835973;121521420;119362238;120039329;121203239;122855982;128858829;120832435;120286571;119812797;118786296;121083996;119443187;119582247
|
||||||
|
122549514;121650922;122158532;124755707;121931339;123748082;123891733;123546138;121951028;122857796;123285861;128906842;121921399;121791206;122674278;124775115;122093435;125159605;122667996;124489378;123111691;121821075;121936839;120237386;122086382;121078556;121713945;121382469;127094248;122033478
|
||||||
|
127438439;132396559;127836916;127429222;125552471;125640152;126525980;129088568;130422749;124874710;127222679;128725269;130088958;127439902;130325981;124842347;131700230;125130879;130072145;126328845;127516582;125014693;124744365;127598691;126233660;125541340;124598080;128946450;124748985;131733375
|
||||||
|
132295662;129646826;133344488;134021718;129049932;128337674;128586007;134367483;130575097;130241065;137711745;131617930;133627790;128750349;128082926;128718416;130622800;128696493;131363554;131397070;129904889;129926552;127895020;129087206;127150458;139230497;130987581;130077947;128448890;133216648
|
||||||
|
134171601;130918797;132368284;131637950;135933306;134696695;135686204;133726353;145815649;130583393;130815005;136295903;132883369;130769836;132543546;132233612;133652980;135041607;132505302;134761802;133519870;137561752;131030816;131950359;134052088;133335391;131993343;130931171;135141313;132628252
|
||||||
|
135541052;136128136;135548527;135027120;138316385;136399666;138643673;137125462;138266878;134244744;135800017;135507126;136452609;135274572;137218283;136780520;140624336;140127887;140079884;134515622;135889381;134850686;140391441;135982112;136180589;135916805;133680263;134973585;139314410;133918999
|
||||||
|
138986712;142403285;136345391;141014136;142132968;138336083;138282929;143684313;142643473;138306556;137962003;137474834;138780440;139353307;138125803;140626470;137669964;136825477;141730403;138491196;139834355;137730742;138574970;127215035;140933028;139617893;137024746;139184378;140716455;138911696
|
||||||
|
141531165;141613555;140548418;140228233;142061659;141065205;141599278;141352285;143772806;153580583;144616762;139724070;141148047;141291337;145657002;144605249;143885055;145189800;142350853;145952537;143419207;145123471;143594268;143710745;140689814;149554402;145406893;141377755;141331716;146599999
|
||||||
|
147503772;145770622;145375232;158056542;149419137;143973859;148110837;155944995;144314202;143831922;144102940;143864254;145018606;147169245;150113545;147784544;146858680;145973526;143527928;155422244;147389816;147246036;145717538;145839355;146014747;145418425;145575181;145108942;145763899;145884033
|
||||||
|
151411509;148403135;147849315;151406520;150073051;150873211;149887570;148307630;146098945;157760067;145892252;148016333;149132549;151615229;147483625;148831123;148091361;153088252;147631425;151973289;150891981;151121900;147934647;147601187;146474130;150304998;147221217;148939958;149797800;147234724
|
||||||
|
153451774;151637227;150783492;152830363;156110749;151563424;153166128;154282946;157617206;150539969;150632019;151966220;153188133;159235271;156361269;150838092;151260185;150743118;150064706;152044966;153287549;159403261;151105545;153375230;151452823;151781283;151591644;152311377;151741416;150639709
|
||||||
|
153076329;155566784;156124471;154405842;158103200;156951595;155082591;154198859;155552649;155615271;153550987;154061051;155091671;154024380;156497862;154408830;159849166;152754907;154893285;154991947;154392900;153815215;160860870;150805777;170084061;146224858;153299159;158595214;155664471;163205442
|
||||||
|
143852183;162824250;159635073;159650794;159174064;156748195;163199933;156500723;159362533;157486645;158547975;157957203;164252366;159573495;156461097;161633301;156021782;155265988;157401532;158051649;159042521;165826047;157148239;157825970;165535200;156797155;157607795;158665026;157471751;158782887
|
||||||
|
159714273;161728470;159700717;160074216;161652793;160270709;162664145;161454216;160341017;165961535;161094095;161452825;165691689;159136329;162627475;161829430;160766648;159780315;160582178;160890099;163931108;162110800;159825224;165406334;162609071;166525377;163241986;161031908;160006949;161035375
|
||||||
|
165221115;163162842;164451185;165014864;164883458;165847727;162739669;165497706;165598383;163909731;164345581;164160871;163782944;166123047;163264313;163883731;165573065;172214453;167402311;162743629;165347956;162457622;164043194;164251719;164065908;163486278;162498974;164038775;168172084;164464486
|
||||||
|
167690276;167102249;167820870;170278973;166506028;169813566;166558290;170883853;167968420;167029950;169331367;166428718;168518943;167480669;170254036;166923864;166964083;169504746;168660700;170289206;167027727;168448598;166166889;165999363;172418838;167987449;167806757;169921030;166448109;166777391
|
||||||
|
175653105;175399992;170659521;170181248;171324087;170480933;171005285;172378843;168423813;172148535;171628211;172161791;171806919;169181761;170259052;175676985;170281425;173142765;172841778;171032801;172025507;173463501;170760621;178233481;173665114;173743948;174209616;173827752;182049953;169462681
|
||||||
|
50
thesis/src/performance/perf-6.csv
Normal file
50
thesis/src/performance/perf-6.csv
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
13293759;13073590;13025155;13588724;13167112;13142995;13018222;13109019;13565248;13188594;13648711;12835836;12977393;13006980;13709780;13444583;12784937;13380027;13146031;13330591;12959748;12918337;13025606;13138246;13195668;13021929;13187071;13241047;13024504;13162062
|
||||||
|
16148395;16131542;16831116;16291344;16491484;16145670;16149788;16425656;15707686;16767342;16787281;16416588;16403542;16345469;16765980;16113126;16750459;16893087;16471555;16487496;16441607;16785447;17140019;16287897;16157834;15812962;16461516;16313618;16211348;16807069
|
||||||
|
19626377;19756991;19101002;20034572;19044322;19132805;19942282;19454511;19192741;19429092;20142714;24682736;21195046;23255884;20784956;19152643;18901854;18906803;17534689;18262227;18373785;18459402;18829513;18348045;18638551;18627861;18208722;18276625;18422891;17911123
|
||||||
|
21262898;21222348;21340369;20944638;22235675;20914929;20799083;21237148;21593131;21065483;21344818;21218491;21290181;21394856;22507104;21978253;20528216;22313957;23055403;20541161;20505311;22567282;20486444;22184736;21402801;21259421;21876345;21410406;21345158;20846146
|
||||||
|
24295572;23761019;24330560;24656405;24476314;24689349;24155509;24346641;24221928;24933886;23540639;26004855;24097346;25580417;24590436;26893909;23447668;24148375;23645434;24209113;23874871;24287516;24393252;25745820;24096744;24814073;23524809;24309659;24581509;24174486
|
||||||
|
28027789;27688508;28249873;27167853;27626516;27385136;26914608;26068709;27384856;27766149;26997490;27609683;29858389;27315129;28071856;27578773;29230434;27659632;26648961;26673108;27258830;27533065;27351832;28318176;27111292;28970127;27470944;26388072;27385858;27610196
|
||||||
|
30281634;30429643;29110761;30304839;30107885;29666464;32222378;30598863;30499389;30419503;30060393;30385166;30474060;29429373;29415265;30128165;31564355;30116182;28798072;31405436;29987230;29989134;31356701;29375227;31264872;31532885;32014524;30829152;31997601;31448109
|
||||||
|
35611777;35519107;36007790;36264641;34842808;35099930;36548494;35746941;36093717;35402069;35977141;39007258;35527243;36086624;35046506;34579865;35054301;36300340;34387240;35082436;34396979;35520340;34909850;35257958;36317093;35433691;36040284;36032769;35644011;35843850
|
||||||
|
39350779;38404123;37870172;40214964;39559326;38772422;39016177;40246345;38809664;39245043;37711973;39334738;38118757;40042979;38847458;42125670;42408020;38935990;38782391;39061555;38674731;42649511;39108838;39020365;39102215;38866745;39800536;38237258;38567312;39375107
|
||||||
|
41531312;40708076;42343756;41869079;41300050;41977261;42531652;39708557;44147984;42911222;43987220;41776649;45570067;42464101;42106132;40295963;42991539;43447318;42582211;43409514;41747513;42494029;42862136;40535670;42463279;43102886;42571781;43869301;42479191;42247729
|
||||||
|
47600686;45592631;45196168;44184115;46188804;44817580;46083689;44018571;44496444;45272778;45900462;45933095;45154377;45470784;43960299;46489059;45878509;46201929;45660413;44345339;44073740;45572763;45841397;43608442;42667928;45567763;42609214;42717686;41828392;42524950
|
||||||
|
43563786;45938296;44871214;46492386;45360730;45426477;45594034;46390698;45559557;45551552;47306153;44695001;45329098;44285623;45448341;45609284;45986771;43144548;45226488;44961261;44368725;43526554;46666896;46962313;46744819;45480093;43860725;47584716;48214895;48500943
|
||||||
|
51876847;52351602;52121473;51765740;51446106;51782673;51577302;53319750;52287958;52172823;51799295;50637189;50761863;51222451;51826197;52742955;50060986;52198043;52496745;51270935;49661136;51484993;51942755;50213773;51775689;56577803;54044143;51090934;52220878;50974788
|
||||||
|
56007101;53572423;55100052;55428302;54446728;55902216;53920192;54837129;54498629;55323308;55097326;57179376;53422221;54244594;55463450;55142635;55311946;54227280;55996671;56075214;55892557;55003884;54914361;55079282;57285854;55094842;56376110;55732455;54983224;54548918
|
||||||
|
58086276;58788916;57464894;58395679;57712276;58852630;59480875;58723378;58603324;57987022;57645055;59284693;58990048;57131854;57049945;58061217;57525042;59203474;58010217;58367825;58598685;57547025;58972364;56723187;58052590;59172133;57438152;58986822;59212932;58502738
|
||||||
|
61496596;61318388;60620608;62090103;61874803;64982183;60872288;59946263;60544950;61941404;62539290;60437531;67235457;61244675;60939841;61322808;62307898;62396972;60880064;62853092;62930793;61538699;62307468;66614486;61674344;61189718;59972765;61270074;62523819;60731084
|
||||||
|
66525072;65435959;64664805;66020067;64562285;65748438;63722007;70809426;65789548;64967495;64194638;63566904;65073381;64936154;65035428;65389268;64164921;63533189;64551855;65851519;65077120;65849916;64137667;64821842;65302378;65333218;65043364;65462230;63389138;64501457
|
||||||
|
68721245;68000219;68518830;69621591;68044876;68064355;68146224;68232733;68582325;65887289;66537917;67156945;67799868;68353658;70216722;67899664;68478091;68444216;68134882;69221111;68997604;69060286;67296668;66950292;68544431;68740764;68998457;68488973;68022613;67699614
|
||||||
|
70303451;71210691;72063053;71293652;69977265;70806523;70433255;71952116;70670878;71373418;71468243;71523480;71378257;71813115;71586904;71957637;70457532;71839517;72663854;71916116;70772075;71258804;71483042;70207424;70791143;71032995;70946216;71399329;71212514;70347648
|
||||||
|
73755904;75924563;74807214;74362958;73537127;73446130;72923592;75081640;75377727;75396804;74785602;74108783;74756335;74778158;75339342;73676930;74141757;73418457;74866531;75425089;75777516;74585042;74285658;76561936;74847353;72912610;75724995;76737980;75442694;74902962
|
||||||
|
75745093;78984741;78601554;79022274;76556736;77271190;79856772;77693163;75557778;76010330;76886951;78478834;78797977;75685959;78541477;78016373;75781735;78184711;76347088;75875638;77231903;77108924;78310807;77376916;75233817;79288875;76540776;79163701;77865890;81477743
|
||||||
|
80635471;80493754;80150175;82408588;81550715;81270900;83089927;81260229;82986404;82941768;83453156;85106158;81947109;79782878;81611263;81052013;81400953;80580574;80651593;84468605;81419119;80174462;81113663;81469658;81978499;80759253;80290539;82099215;80827856;81932560
|
||||||
|
86680900;83847605;84087693;84219951;84113103;84260931;83940756;86630933;84677173;82959393;84906760;85400042;85273405;84075039;83192779;81377098;84609912;85326429;82753361;84024791;85075981;83962179;85477754;85282914;83928293;84528763;83795494;83915668;83666051;82509176
|
||||||
|
86362469;87878365;89146378;88575164;87093074;86993971;88384162;86241103;87954434;86768351;87156858;88941920;87520127;88164904;87636264;88411906;86661452;88049669;86988320;88621825;86807517;87048819;86482053;89620203;90826245;87721099;87098375;88143073;87295179;86850531
|
||||||
|
90577831;90340447;91342150;91517663;90168922;89460842;91183892;89873397;90700991;90533685;100498746;90051333;90039601;89589463;90487254;90543083;92326881;91068648;90442086;91331941;91203059;91083667;91816766;90710288;90429821;90427708;90534326;91582910;90596166;89989313
|
||||||
|
94242677;95983011;93534998;97282294;94903556;94169195;94465382;93722202;94234993;93216647;94364255;92924968;95835083;93790766;95492155;92556820;93335729;94511933;94489559;96074108;94321832;93646736;94212479;94532143;93414834;95148574;93395896;95009152;95191708;95150097
|
||||||
|
101281313;97084239;98263058;99464861;98710340;97303246;95437318;97199645;96183794;96561981;97047759;98249812;97017810;97503146;97596678;97527915;98117103;98480772;96005536;96710550;97119358;98420755;97767021;97016518;96954797;98825214;96691484;97448540;98861786;97794224
|
||||||
|
99309860;100087587;104834503;102229383;97657738;101879921;98129959;101047418;101325260;99720120;100579405;98560238;100964687;100793723;101338917;101866055;101022900;100503698;99581430;101586460;101515561;100022209;100835926;100681295;98890182;100773614;103146111;101245054;100423441;101263600
|
||||||
|
103176861;101274241;107428121;103315632;103758806;105303118;104288770;102952373;105369597;104304800;103077217;103848381;103882317;103635055;103282106;103593864;102755218;102779326;103354487;103493609;104168034;105559377;104154778;104210748;105059202;104195868;103018753;102406720;104887838;103763987
|
||||||
|
104479031;108352143;107994386;107468270;105887428;107362624;106737465;106180469;107073360;109656307;107228211;107485073;106957936;107216429;106270584;106894421;104872188;106487478;106229875;106874262;108010929;105365509;108020628;106951913;107506385;106372945;107730031;107526634;107081556;106517006
|
||||||
|
111913128;110898731;109714701;111470044;110336785;114364027;112039054;115399778;111663442;111220257;108837601;110860065;110009597;111128649;110467329;110668331;109557956;109770400;110101426;111319591;110246108;110741705;110485394;110736995;108765430;107881757;111064454;109046759;107417291;115020930
|
||||||
|
115090414;115000560;113113690;113325493;116011421;114351473;113767706;114167846;114176883;115255016;113504822;114037933;112493782;114606351;113207954;113978156;112543349;117086577;113520113;111003685;114529240;114800720;110866087;114413505;115105534;117672501;118024858;116668773;114187524;113851669
|
||||||
|
117432001;119698572;116823475;116160332;120375872;118038494;118141736;119408375;115911406;116999829;118967545;115747407;116380461;116169960;114445338;116870145;116178247;116001832;116299863;115127287;115440338;121794198;116453173;114403135;115901918;116042222;118475947;115959711;117076789;116536045
|
||||||
|
120230289;119313601;118434577;119956204;119558699;121880707;122571414;120375612;118963659;119436491;120477401;121968358;119370322;121176724;118761885;119830719;119763899;120230620;123017103;120867121;120443836;121770252;120466239;120362807;119976424;118650519;17400042;121149712;121562848;119045710
|
||||||
|
127147218;122654968;122584781;123604159;125278614;124305776;122124182;123138019;122541687;124211042;123719113;122033115;122846742;121853194;126183599;123281359;124459497;122762347;124541587;122441421;122102941;124382697;123237184;123049808;123715005;123535214;125472422;119224999;126962347;122937077
|
||||||
|
126026062;126820972;125297070;125944924;126879876;125668544;128516569;128245710;125272693;126081410;128558651;125918622;130798128;127379521;126333922;126700948;126907381;125944964;126932790;125233066;128036502;127372016;134243436;124204139;125431002;128345756;130350475;126937420;127124013;127932951
|
||||||
|
133940286;127082152;131642364;128342109;131778720;133685849;129934344;132108533;128611845;130025281;130274387;129941868;130885608;129516700;130055190;131565374;130743772;130530627;132663406;130629118;126012707;128514505;134436804;128782037;130103814;129699125;129852504;131278104;128792137;121975213
|
||||||
|
130958080;132410433;131103764;132495167;136005554;133724435;131782648;143681031;132918684;133946107;138074959;131233367;134548131;134829601;132602808;134151618;132311129;132416835;133380445;132932862;134893545;134673526;134236414;134513354;132922562;134440972;135645191;134135938;134708234;134951839
|
||||||
|
135037687;134701030;136007397;136928243;136591346;136208590;136444600;135512653;137763301;134978170;135173151;138792218;136297514;136765936;136395284;136748643;136671603;136982720;137000935;135700499;136081132;134896331;134871142;136590555;135777159;136830282;135893415;137024181;136295629;135405664
|
||||||
|
139263948;137593771;138042476;140229641;138897374;138958523;139463468;141608710;138312533;139392009;139347361;139674278;140022488;138628409;140630082;139504488;138952361;140332633;138329366;138776819;139001527;138404682;139347261;143028550;147144807;138634391;139868638;140802469;139693827;139574855
|
||||||
|
143216837;141511081;142243779;145327012;142649411;142172801;141026315;140815635;145104298;143876964;144341611;142399113;142555858;143299278;144109238;132331590;148986499;146170818;142683237;141685080;142878157;142640223;141818320;142960367;144204784;142905000;142064410;141939997;141201788;140802409
|
||||||
|
146754757;149508156;147901042;146177161;150913547;145474841;145292345;147100711;146131371;144682155;147425495;146581569;146887256;145882426;148307084;144821387;145410225;145929989;148376129;148017059;147056947;145540950;147119488;146098778;146252798;145682827;145185617;144036406;146517123;146068850
|
||||||
|
149140159;151260865;150753075;150463400;150096263;150159867;149218582;153450294;149410656;148457908;150132274;149196579;150075904;149484901;147550269;149687627;147900702;149873158;149445053;149695652;147867798;149034713;146295993;152552334;148656736;150036857;150884731;148465614;145516623;149787652
|
||||||
|
154687387;153290883;152982722;153173925;154023823;151197923;151075834;151594546;150089922;154414786;153252498;154975669;157253621;152534930;151418822;151178094;151983574;154008312;152977142;153392302;153697487;153203082;154605908;155593534;154681595;152964137;152980699;149385618;153699050;153091775
|
||||||
|
153765660;156015918;152704651;156083861;156804586;155109570;154471917;155995288;153660464;152854052;156349789;152914871;153600968;151276626;154029013;155225646;153973194;153257419;155404986;156189697;155295343;155190949;156987433;154718989;160283911;156710322;154452329;157501104;155282217;160709491
|
||||||
|
160357685;158227210;160072228;160163376;155267959;158169728;158944499;158188626;160437411;153475204;161465375;158253873;159852259;159680354;156678190;156628052;158438592;159686216;157448823;161403275;157802722;159049764;158610258;158004897;160229495;159584197;160321144;160037541;159104030;158764308
|
||||||
|
161526906;163006591;166927397;164468261;161394317;163339821;163058182;162970000;160321115;166133509;162525954;159893379;164348769;161770410;163902098;164906106;166187765;163576612;161331254;163447551;161594567;159776192;163897969;158191762;161851428;163253072;163133127;163424246;161870556;163356484
|
||||||
|
165402193;165676348;167694603;166326224;165327938;165218806;166042602;166459074;165459094;163389899;166995641;165258934;165079263;163165571;167691567;169061529;168578317;164809708;165191632;166095806;165478903;165697438;163092499;163989398;162096778;165990491;164847862;164361454;164459264;165855437
|
||||||
|
166302719;171449445;168446700;170049526;173827253;170562186;168704984;171085947;171160463;167124070;169020680;168600630;167565873;169585902;168732257;167603867;168582475;166624447;169468483;169942748;169498862;171722699;165196032;170458814;168776994;172456721;168030108;170350193;167387796;168873022
|
||||||
|
172249586;172854977;170788097;172906768;172915946;170279554;172401653;172376374;171588688;170625239;173866209;169334281;171883172;177166786;173873403;174937769;172629678;171411763;173121527;170239216;172972156;170475738;171420260;171661269;171306869;173665278;172436591;172686088;173077291;173355323
|
||||||
|
50
thesis/src/performance/perf-7.csv
Normal file
50
thesis/src/performance/perf-7.csv
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
17216356;16955417;17116330;17316731;17063448;17122082;16805635;17508706;16852286;17592139;17356259;16894588;17223499;16915630;17074489;16664359;17287775;17252766;16800475;17329266;17173382;17119116;16925368;16969945;16852787;17040584;17339566;16683788;17333795;17653930
|
||||||
|
23794712;23862985;24060801;24371546;24444849;23795733;24303864;23634319;23978861;23562759;24610382;23791736;24009901;23799321;24105698;24221785;23706109;23873575;26407646;24416855;24397186;23775815;24226393;24448667;24329915;23720327;24178219;23862223;23813308;24431523
|
||||||
|
30559812;30788056;30593116;31121687;31389429;31431912;30999669;30909744;30594479;30462602;31829908;31038164;30603146;31046741;30487701;30999139;31045579;31297750;31217193;31039617;30594439;30834498;30814107;30605350;30854526;30821221;30938230;31733190;32656410;31472822
|
||||||
|
37320142;37958487;37255877;37484643;38858081;38217552;37863632;38122016;38612051;40952955;37276878;37806471;37992082;37981963;37890875;39330993;37599668;37658722;40429926;37753538;40256678;38064624;37285335;38065496;37701035;37711426;37290124;37628053;37941895;38169970
|
||||||
|
45862577;45620616;48323676;43992582;45198353;45139068;44564227;45449933;44785388;44189907;45677929;45412160;46317886;44943125;44625326;44126193;44510883;44121754;45188945;45570659;44327255;44878500;47583093;44008162;45249273;44445836;44285193;44244964;48182131;41330793
|
||||||
|
50926221;51787770;54909217;51294730;51477787;53681223;51634763;51675041;51594504;50792540;52002930;51898446;52168523;51307395;51298537;52171418;53492856;51311563;54976237;51456235;51555297;50907364;53966158;51791719;51732443;52999393;52085101;51615806;51646857;51435274
|
||||||
|
61338712;59022056;59238308;58122191;61895789;60887143;58939886;58189122;61152019;60553733;58627707;58702804;58892112;58266283;57741009;59228760;58352060;59916380;58301662;57940417;59091091;59026194;57507383;59298806;59619651;58011717;59350688;58856083;59352070;58475822
|
||||||
|
65709445;66250580;64801114;65457575;68168890;65682242;66409380;65733943;65243157;66239007;65141267;65247374;65098905;65668986;66026203;64768912;65709366;64511239;68741978;64764312;66518252;66803358;65328292;65096430;65519706;65603760;65597938;64715978;67647895;66410472
|
||||||
|
71990893;72053765;71700988;72379130;72087101;71774531;71766084;73482701;73950995;72589370;71967357;71708141;71016644;71946857;71617786;72070368;72876530;70810681;72048235;73180753;72697912;72463003;73770403;71450840;71484195;71889385;71929173;73608056;72346827;72323842
|
||||||
|
78834035;80121866;78668663;78062893;78451670;79032402;78406492;78971885;84900744;78418045;78811572;78611602;81212743;77987375;78669836;80508321;78759711;79319533;86634435;79063433;79616372;79106608;79646330;80233675;79172246;79374179;79997334;79920615;80541084;79062401
|
||||||
|
85327196;87119161;86098340;85895233;85591061;85343718;86349901;85628304;85623284;85919982;85596672;85926144;87175820;86457620;86995760;86283231;86241650;86257040;87043232;87570941;86270455;85819216;85225789;86468111;85840668;86206801;86103670;85654966;85237472;86921265
|
||||||
|
92972493;93933327;92611870;94000538;91486316;94488289;92429184;93282869;93139309;92718919;92898089;92781291;94069703;91924180;94036728;92989407;93872228;93911143;92957224;93198013;92051859;91661828;92183896;95554939;92728738;93006430;92936284;92430487;92493901;94113398
|
||||||
|
98808432;95982081;99309660;99810166;100205126;102976820;99400718;100508337;98945390;102426968;99386089;100475643;99261957;106011697;99799044;99485432;99146071;100553426;102147443;100443601;100136964;99621027;101525059;98961632;103117945;98681817;98664041;100996660;99208173;99736803
|
||||||
|
108415124;107416407;108071243;106024202;106472787;107212880;106227438;108647226;114776207;106767562;106040785;106745198;106247227;105411818;106228260;111033650;106252177;105979746;106645334;110791908;107695081;111459580;106116774;113281983;106161120;110456725;106755969;106679832;106653520;106330330
|
||||||
|
115006566;113537592;113166679;114422668;113110329;113667105;113394403;113205475;115630503;113634060;113367610;112763854;112417218;113215605;114902514;113739396;113392800;117462015;113756610;114739657;113718716;114154696;117746328;113401688;112643008;114108736;115438199;112440965;113513846;114074570
|
||||||
|
121230623;119343032;120345287;120657916;121651724;119848618;120345206;118642847;119515739;121551688;124974793;119272955;122770014;120873988;120441915;119663607;119012829;121458507;121330718;118995295;118532101;120907634;119237837;127198779;120001016;127675570;119749595;123089808;121776007;121819181
|
||||||
|
127976526;127916740;126696811;127802237;126718854;125889387;129328783;125831203;128777618;127878876;127564754;126552860;126765856;128530526;128686260;129115758;128049047;128311861;126326679;133265990;125971908;128565244;127321540;126933503;126028038;127990534;125669228;131198569;127154274;126797498
|
||||||
|
133585604;131281832;134820902;133375203;133861301;135041943;135585313;134715687;140205150;134769301;133823708;133372307;134319654;134941127;134995944;133728593;132741087;133526919;133352990;132973571;134814630;133047575;135345746;135913643;133881109;133836413;133426113;136501499;133568851;136396915
|
||||||
|
142422534;141449296;141176605;141492491;140759652;140878334;140365093;141501439;141722359;149706396;142102620;143672392;140621102;139987937;141071400;140148250;141644397;139825841;141974521;141583108;140928401;142551887;141106949;140073765;141477602;142551125;141302691;141624869;139651562;140648316
|
||||||
|
146058985;147107980;146037042;149132728;147791303;147068263;148657040;147084525;148395421;153201031;147888292;147719102;147563599;153780872;148130153;152894152;149100816;146324123;145902250;146578879;147412254;146097180;155828294;150412615;151915865;146673353;148932188;149010651;146766345;152658574
|
||||||
|
156504392;154877390;162629625;156627843;155127447;154439737;156324962;152580972;153456700;158732076;154307569;152876849;153663493;155513691;153125464;153552617;160719461;153664415;153872190;155221451;155197484;154992194;160876879;153037032;156411091;155194859;155014738;155464806;153624227;153268073
|
||||||
|
166231509;163654134;161693320;169244704;162148397;160490154;159765932;164658251;161255868;160475475;160699172;162005158;160076969;160099232;163440227;159432943;177949256;163416099;161810329;161262410;164671227;160026059;161262781;161423845;161191502;162136805;161593916;160859335;163122097;161303701
|
||||||
|
168165981;166961192;168155170;167792813;168696636;168057820;169642771;167504662;167941574;169168125;167838092;167815067;166752876;171815176;171153536;166989598;167674583;171863311;167535862;170248582;169725582;166667159;178263911;170634013;168978366;167622292;169211410;167503439;167623443;171756262
|
||||||
|
176194696;182108457;174906784;174992923;180392541;175300633;172326364;174478369;175972734;173890022;174041147;176428382;180423852;176064482;174756392;174819144;176601510;180225255;182668199;175012782;180580087;175494842;174041218;177072909;175160200;174535682;176954989;173702477;174055595;176303459
|
||||||
|
181792291;182919449;183311894;182993603;183574956;182991830;182997090;186238871;181651787;184508076;182250074;184779496;181863290;182177142;186236948;184266796;183444312;180766542;182181400;185290362;185148155;184057909;182089350;180634023;182168455;180698148;189251936;182302326;180621479;187393653
|
||||||
|
190420966;188207971;187586148;190661044;188213041;193567962;192431486;195171037;188552613;189216027;189143906;187985448;188261335;187351501;188590015;189125841;187668129;193453148;189802710;193398632;192355809;193892956;188948676;190345880;187126011;190774405;188697195;187381740;186797251;189952934
|
||||||
|
195191227;195157021;200918615;195581198;194386318;196075552;194956048;196149226;194682074;194006147;194688797;197438439;200930518;201318445;195973272;195114749;196350308;200200545;203603480;197761559;197081734;199667837;194544026;204422497;196203641;196287786;197774706;196200666;200992430;194112314
|
||||||
|
203626325;201243789;203170196;216353691;201079780;210599020;200784023;202753713;204994814;206152360;200360137;201941971;204829281;203256363;202540928;201566539;203348854;207135658;204589103;205399703;201724126;207400724;205181658;203206877;202338855;201285692;204866303;202536911;202504678;201313236
|
||||||
|
206350186;208478496;208124796;209074138;211361538;209582659;215846953;209799412;208902593;210648568;208100920;213036143;215106500;209165396;208337712;211711400;211050933;210301711;206187148;208964084;211961638;209155667;210463878;212114295;223823246;208584904;211486091;205834842;210055492;209841214
|
||||||
|
219531859;216939213;217121580;213635893;217187819;216707472;219096951;218039018;215550767;214392197;214081983;216964543;216378921;215668637;220105948;215205334;216593309;216791396;211163803;217429631;216092643;216225041;220354474;217242947;218511400;206682546;215852204;219796576;216700038;220144284
|
||||||
|
224334453;223222245;230419649;224972758;221115326;225405162;222765465;226762548;224042655;221702973;226018818;223817456;239499834;222577037;223960885;224680058;223170013;226721648;223363901;223725236;232805962;224692582;221962098;224862203;234124593;220872434;225296029;222678425;225767518;224344233
|
||||||
|
228766275;232841611;230385522;230237133;228574271;234491899;231016613;231687451;228209199;228927800;229747619;231527409;229041632;230113092;233502751;237737739;231152398;229536277;229374401;228683294;229977167;230447854;231426723;228704575;228484055;230935385;228984140;231833065;229190472;228242876
|
||||||
|
239616993;235951175;236028335;236510235;236999269;237228807;235664967;235382806;236519624;236090537;236022775;238406993;240199609;236486950;238887020;236605771;235192336;239328090;236069045;237848575;236126638;239025570;235917630;234010993;238372747;235541256;237601643;241447433;237564572;233562528
|
||||||
|
246775701;241270287;242937899;244740824;248353257;242775571;243190511;243670387;245016581;242893101;241387646;244937067;243869876;244074244;242250078;243181083;245671669;243595731;243808657;243761524;248116175;243105376;242620119;241856280;244429256;244461289;243256119;246257862;242322890;244380261
|
||||||
|
250473622;253263171;255709722;250377325;250582765;251875055;250047021;264639964;248671558;249885085;252361914;254215268;249624617;252395270;250253423;258972764;249201773;249539722;251975020;257798996;248951425;250675095;249266459;254265727;246218666;250901417;245390752;248639907;247636751;248859315
|
||||||
|
257608154;258671377;256549129;257592914;253721486;260842080;257864143;257655767;257541845;260874383;255188686;260049625;259711325;261529179;262650145;259918499;256215409;263509772;257824947;261923058;257001662;262660516;258648452;258400118;256541354;259363747;256265556;255403355;257805258;257578096
|
||||||
|
269925631;265072519;269217621;263715813;268511845;266576511;264468812;263143177;271047088;267667138;264674151;262909581;264530892;264681306;263080004;261604566;264931464;264706074;264508700;272767653;261734420;263671147;265559168;267624194;262471938;265567574;265403884;245022514;250730765;264017382
|
||||||
|
270480895;271188995;273413272;278167502;270542875;270321795;271067908;271997231;278521482;269376941;269807842;269650846;276051927;270113137;270311624;271659522;275126693;269256297;270673520;271245035;271162233;269734169;269907076;270699190;281981770;270622431;273969357;268925112;272507436;270912766
|
||||||
|
287228600;276384346;279519528;279757422;275789806;277128857;277552323;278861130;282206766;277366216;274667300;276407664;278977187;278587185;277941776;277085927;279375993;276744630;277606470;274441497;285700878;281904823;277254743;280619415;278131201;279113378;285021791;278085672;275937361;278571799
|
||||||
|
284038030;289354960;284890913;288323037;285439121;286192591;285211056;286795476;284250352;287925549;285962040;283503434;293772633;286489487;285094456;283733431;284816092;285672062;283982276;284470918;282840107;284911166;287315886;284010890;289943680;284375419;283984948;284704251;282886074;284290804
|
||||||
|
289525894;293200941;302801906;295425960;292762866;293959259;293372864;294221049;292820015;294215638;291715691;289163864;290914999;299175991;288729657;291166719;291085680;268550218;289786055;300172583;290276762;293715808;294119285;303412790;289573719;290961496;294290417;290562697;292302670;291171394
|
||||||
|
297394000;308779054;301249548;304836003;295485887;301829388;299870929;295955051;300056980;307413007;301293612;296488109;296471978;298751233;300836629;301104963;297199826;298990598;301676647;296809353;301678589;300086955;297798782;298214433;307282607;298329686;302456936;302946280;299242355;304207679
|
||||||
|
304529757;303703185;304687854;295212544;309663608;305231534;304533080;306091401;306854679;305949172;307223387;304906178;311615212;304390612;306307500;305280977;305372816;303246129;305676498;306267189;305953738;313665388;306789518;305050206;303455214;306789607;307465004;305132905;305832259;304364977
|
||||||
|
310731984;318297228;322294303;314749789;319081618;309847288;314951563;312006237;315733997;312863770;314527643;315955508;311128634;312452366;311284438;311310408;315152531;319490301;284197801;311612927;308025631;313926037;316462704;315623367;316428347;314539633;313468144;310795781;313906167;310813815
|
||||||
|
316206874;320897361;318837082;319544922;321507129;326771315;320785521;318668542;313862178;323956234;320043413;316580720;317638182;319876005;318109640;317089040;321779066;324665114;324802842;319344036;20802600;324898428;317720740;317982670;318701832;316367701;316664781;318140918;318531149;316584211
|
||||||
|
326440543;324808129;326115920;327239481;325586778;333262557;335536371;326355435;326906299;318384149;297674420;325392156;330073385;331814130;325338471;328055228;326759932;328850208;340636494;326368949;325323389;327610450;327192795;325701105;327120173;323259603;329155362;324615708;327008413;327013814
|
||||||
|
332268081;330538458;332114180;336987444;331628151;341172164;332086555;331755359;331128497;331396909;330442277;333994114;332746390;331942662;337795547;330347902;329199262;333050061;332865331;331670751;334731831;334783131;334845121;330055069;334228999;332304666;330725766;335912041;333701068;333142549
|
||||||
|
334635961;343115718;335572066;341129073;335530174;338042834;346284808;339413226;339443375;339655588;341441070;340253003;341316086;336155041;339596943;339331946;342168888;341901296;340653893;340873671;340809446;345654434;339413303;340871597;340234213;341966572;341418092;335932794;337646115;346991540
|
||||||
|
350134319;345312185;348360769;344785146;346156681;343593923;353763385;345554776;346614623;345096493;347288116;351547653;349451224;347118284;347055200;349498215;339113523;345837225;345319445;344136939;348025542;343649086;348462694;369445143;347215751;344617886;349206634;346095877;350053485;349356064
|
||||||
|
354332249;355884145;355950635;356160324;349996864;355103272;357894734;357087832;354300435;355912579;350221951;352601341;355234325;352979177;356330182;353996110;355329640;351454965;349794306;358937796;360477148;356239995;351716413;354844012;352884160;352274802;354124779;352987992;350130809;353125209
|
||||||
|
50
thesis/src/performance/perf-8.csv
Normal file
50
thesis/src/performance/perf-8.csv
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
15890167;15247295;15576857;15468806;15231023;15375524;15391145;15516609;15416153;15887994;15829860;15639409;15374953;15447464;15403739;15105588;15476682;15602187;15150826;15891209;16475920;15653807;16096571;15555885;15207126;15419470;16043276;15674127;15522731;15577839
|
||||||
|
20582869;20760525;20847295;20951267;23177759;21412617;20556057;21038818;21312572;21152470;21205052;20733953;20946468;20503964;21436513;21057334;21336028;21145756;21249238;20829590;20984802;21204861;20907262;20824671;21090860;20681912;20770455;20950265;20536859;21494316
|
||||||
|
26235492;25985354;26497072;25739775;26261552;26337020;25981066;26144184;26367689;26029269;26208239;26380615;26352019;26528634;26640191;26018308;26606856;25885179;26021073;26532881;26106641;25663757;27053106;26323042;26182398;25878997;30120398;26676311;26025532;26636864
|
||||||
|
31593050;31131539;32291191;31419391;32308124;31227306;31982499;31483355;31993250;31929064;31665541;30864649;33171527;32038417;34752681;30946148;31957109;30996095;31359403;31860711;32207898;31308915;32370476;31400143;33603229;34934084;32627206;30765175;33653758;34008649
|
||||||
|
36945947;36229972;36815113;39786557;37750176;36488957;36564063;37724355;36359254;37058877;36695238;37111661;40659800;39072284;36917462;37548001;37479909;36942731;36920147;36245993;41423660;36772750;37630893;37459969;37197098;36520318;38167599;37147450;36975535;37077263
|
||||||
|
42900950;41934726;44029400;41798490;41681211;45518234;41679017;41414060;43873096;42640752;41225863;41572950;42986917;42415333;41681682;42123904;43223990;41904266;41485860;42735697;42124706;42099467;42069448;42602337;42480019;41987348;41397258;42008319;42502673;47869298
|
||||||
|
47271012;47562861;48077113;47221575;47066042;48079949;46725918;48215023;46390565;47521780;50017938;47571497;47605834;47550066;48917352;47382389;47785134;47272714;48673747;47241113;46985805;47270681;47954364;47451443;46895038;46805794;49968332;46717962;48607908;47805894
|
||||||
|
53702082;54610273;52199722;52380826;53161107;53713193;52502723;52522762;54071432;52468827;53012838;52852826;54036334;52293014;52723984;52108535;52965275;52415653;51818238;53292272;53534365;55922472;52979823;54430232;52728323;52812828;52370916;51935406;54533001;52685029
|
||||||
|
57656463;57173941;58150917;57938362;57483355;59007848;57772449;57343773;58694607;58643307;60396586;58868365;57322211;57202888;58292252;57956047;58263737;65261513;59545757;57529024;58435041;57913333;58501541;57584983;59579302;57198169;60099146;58216535;57834450;58671011
|
||||||
|
65259298;62488435;62701690;62363391;67199822;62744294;63297412;61997798;64057866;63502272;62592237;63191606;64035021;66413379;62723012;63729274;64179552;63079908;64519606;63373059;63507712;63306449;63867483;64211425;65111519;63032305;63444449;62838658;63766787;63240882
|
||||||
|
68919876;69193259;70826524;68740306;69778019;71533332;68496210;68208619;67840591;68499335;71127300;68554964;68226173;67961567;69137440;70194271;68980073;76521529;70594522;68642364;72895749;67364803;75714666;72664839;69087352;68068425;69848577;69245771;67927019;67353080
|
||||||
|
73972448;73754303;76863115;75558311;75089697;73803308;73677123;72718442;75520837;72045550;74166987;74288384;76468997;75952098;73259738;76945916;73732190;73390453;74017125;74222846;75343181;72775353;73912250;73373049;68088775;75334874;75823898;72825351;75097522;77213017
|
||||||
|
79762699;77878926;80164993;81274166;78694325;79084756;78439989;78918723;80086640;79026774;95463586;79147559;78080118;78359041;80911218;79188369;79527690;79143200;79611183;83418067;82852474;78387256;79851251;78653405;78245760;79194661;83885107;78424208;79537689;78836773
|
||||||
|
85009730;85473444;85956937;84388278;86443365;85862153;84265348;85429628;86014680;85769852;89528521;83798247;84900086;83645399;83724564;84732238;86617716;86403948;89213437;84923943;85831061;84933291;84383097;85123912;85040389;87202446;84542990;86277511;84407004;84534723
|
||||||
|
89043004;88957708;91141757;88937108;89904244;90388499;89876630;88909283;90389771;88805652;90795361;90223246;89943760;88436882;90979901;91892581;92363208;88862712;91621733;90346266;95711558;95609909;90941456;90869846;89604720;90098181;90776254;89312349;89494464;89957217
|
||||||
|
97622744;93073162;97798668;95487821;95344712;97940453;95485277;94426422;94521757;93376404;105940785;94329653;95249667;94660257;95542548;95769701;96886298;97089765;94580752;94784470;96648334;95623175;98211462;96310015;95511978;94606923;94516988;95405710;98110966;96141375
|
||||||
|
99538379;106219207;102047502;100533309;99044767;99294484;102017523;99426702;99187816;102729562;99391192;99114653;100704854;100581263;101548418;101257973;100286398;101165161;99207043;101314763;102471398;99112228;103257702;99267701;99590370;100392655;102240538;99683001;102243394;99586563
|
||||||
|
108446000;107218215;106512789;105822242;105424767;107204267;106829175;107082620;106881047;105749441;105283582;110213936;107114632;104543689;107951353;107941314;108198546;105010519;106523890;108046730;109853683;110561043;109727197;108363046;108066468;106711837;104443303;106555893;107006471;106296938
|
||||||
|
112992283;113802013;112449274;111438804;111124452;110313470;112584258;110853583;114376653;112487780;109370581;111232081;111675826;110875836;112765521;110017262;113644746;111669163;111105504;111553447;112749139;114083020;112898500;111877639;109783506;109590679;111572083;110145522;111907278;114427111
|
||||||
|
117145822;116968988;114544199;117405148;119068741;116050807;114781351;114954238;117523128;117303279;116242600;115774558;116894442;117099602;116850897;116867479;117030156;116942736;115489652;115128999;120948978;114970951;119924670;115673902;117191831;117387423;115034725;117452460;116218373;115414486
|
||||||
|
125029034;123458260;122103198;121454604;121254403;121381671;122437190;121527355;126623032;121407652;121772153;121416941;125018664;120012622;122504231;123195909;121345261;122891485;123504220;123059122;120780348;123136603;121690764;121830998;120884392;120274823;122690012;126826288;121673480;121083379
|
||||||
|
130273289;126015396;125362634;127872689;127446617;126461066;126103478;128155931;125876125;127425396;126539539;134252849;127896856;129008132;124913147;133293278;131231117;125797171;126465114;125427911;129475634;128744298;126316924;126611649;132549458;126666747;128440025;125328778;126337143;129157955
|
||||||
|
130977913;134528486;135474772;130985217;134372663;131311904;134112445;130091404;132622570;131813853;135622981;132561210;132556732;130015877;131944186;131468379;134018682;130834493;132670023;140692496;131594475;130501624;133956992;133911654;138583122;130785668;132287457;132039753;129305301;131168044
|
||||||
|
138703187;136402992;138459962;138110201;138907485;139273649;135870243;137202100;139217520;136774356;139013251;136930950;137330991;136199946;136563123;135134257;139321643;152626286;135275242;135889721;139832128;135135319;138179125;135742964;138884750;139343615;141481775;137789585;145569836;137649211
|
||||||
|
157758714;144817739;145287415;144932322;141337083;141659110;145056645;142644411;143199264;141928656;147904769;141940849;142859831;141732573;142613492;143228501;142206537;142707865;146337072;146235253;139633400;141265803;144639100;144604444;145383041;141881283;144108556;142357151;143904158;145469079
|
||||||
|
154908435;154078768;148582260;146739957;149783161;147902825;149710619;147104097;149709959;146580085;148077615;147352291;152582450;147901853;147428009;146996518;159265341;159492233;146200395;150772000;148488977;148331260;148502203;147438279;154276422;146215424;147306071;146143043;151455883;149158624
|
||||||
|
152545627;151553033;154806997;152103045;153166789;152302975;151579022;151784353;152216165;151492855;157494958;154024150;152117101;152805865;153347582;152788962;153406106;153062165;153783010;150410895;156462956;154721270;154813320;155860181;155526140;157831284;158246865;154628439;151423249;147790606
|
||||||
|
159892323;160597438;160155817;158030893;160764423;157776647;156633920;157110228;163367971;157801185;164307542;157665210;161432085;159785515;165383651;157156869;161291050;160180074;158357841;160893816;160847305;157827046;157946408;161490750;163608168;157727572;161717973;158183831;159913694;157495489
|
||||||
|
163190113;162527240;166101099;162508424;164279508;162556197;175082924;162854839;165045420;163246874;168607256;164883835;164054418;165566097;165647555;167013198;166675840;163608048;164709486;164022957;165184832;162392899;165193870;166696700;164906259;165955376;165799751;165125848;162976897;163790474
|
||||||
|
172999501;171771106;170048396;169801164;174295467;169656162;168504956;171815522;169516589;169851442;174009290;168854428;171084617;168888534;180950474;167160405;169430751;168911389;169016614;170224479;172039147;167701760;169463004;175075668;168280299;168792938;175149923;171342029;169389802;169442965
|
||||||
|
175521448;172736658;173671220;177978439;175093593;176356707;181799079;174298113;174561547;180187116;180608517;173405051;177795963;172833526;177326157;175086109;173743531;184363018;177032995;173947248;173622656;175408447;176787647;173554643;173560034;171794010;175450559;174284225;175985573;178363169
|
||||||
|
183419338;177961094;180376825;182561966;181480698;178212946;180973509;178553840;184472472;177743120;179971675;179578809;183220120;180408948;177989610;181720846;183080326;180777386;178941476;179865107;180801042;182053445;179319003;179684926;180871800;179277351;184680728;179971715;182236201;181876579
|
||||||
|
187544141;182583829;187038124;182875788;183868253;183418666;184249868;192960061;186658223;190364741;187593096;182910596;186482521;186987135;186483372;183564952;183104493;183031121;187521256;184368118;185132548;189092160;191233474;190087570;185057352;187572035;194055247;185326627;182792455;188854415
|
||||||
|
198685826;198021121;190372907;188366825;193295846;187881508;191990160;191543570;189436931;187538089;189385420;188057532;192217203;190059906;189872410;202429255;193528680;187494944;191539191;190026742;191440738;186139131;189142587;189426891;190362817;190250899;188456610;189106287;192983026;189556174
|
||||||
|
196330283;200214517;200742386;193060637;199010228;196527588;197751093;195661318;194000139;192498702;196597964;194671589;196529100;196461077;197674304;194992043;194410640;197482349;198218124;196080355;194030659;199917197;206351433;195486377;193808816;197587634;198172334;194360031;194659986;193426691
|
||||||
|
203906075;201702989;203618685;196858442;200509763;197732998;201722067;202915463;205549960;214283961;199438042;197887780;204746413;200042190;199361282;203909551;210788986;205110353;200403414;199374248;204026098;200354159;202070265;203803565;205303399;200253532;203800799;201959569;202396421;199537506
|
||||||
|
206573155;207800859;210711324;205198585;208522777;205510022;213012191;207097047;208534650;204391581;205578696;207815848;207501535;207133658;206475124;210766392;205997833;213237149;205596871;207521103;209769919;202541574;209401399;207739780;204843733;217217541;205361222;209512927;207465896;207259142
|
||||||
|
214942074;210663922;213624996;211237761;215372513;211603413;222493068;213427882;218473330;210090764;210320692;212578024;216749478;210750170;213604365;216937545;212640946;212376441;214756972;209164378;218417831;212826949;209940631;210484882;214946162;211211600;211009345;212690593;216205517;217811108
|
||||||
|
218866355;216257830;223778464;214618713;224399395;216416859;216760389;214599906;214858170;220415336;221300111;216535230;217211749;216258490;226544478;218110020;214875143;214514420;218174236;213914770;217307536;216781029;217530761;218350299;215268430;217138496;225272117;221900392;217382331;216998403
|
||||||
|
221808432;225871796;223393262;221733396;222789374;219206729;222706393;224694209;235159015;224256977;222539858;220987912;225188593;224246256;221185457;228672797;221718086;223362041;229564967;224034422;226855674;220592862;227720711;223554246;222908507;224037048;222237830;220197823;227818631;222577412
|
||||||
|
222473208;225440435;229414573;230760478;227226176;227174065;231336010;230015355;227901864;227698597;228047828;228551520;228463529;226676234;230252958;231500892;235299028;224898657;233371670;226940349;229167612;228504228;228197761;228154166;228301573;226892596;229658569;227627429;226806057;227103235
|
||||||
|
235098957;234791989;236535438;233017318;236907444;232236666;231999303;232108356;235993452;236829562;234036175;232927112;236446605;236072777;234659480;230891924;236469911;231267666;237144686;230769756;233736872;243189072;233542572;233648880;238122994;231504999;234688046;229358654;234153474;235114868
|
||||||
|
236695280;241124176;246418660;243480992;241827187;238004573;240988682;242348223;241408570;236669790;241346770;236124156;239150808;236091373;242462065;239072816;238628319;238010324;240894127;240272144;236083887;237791618;239672345;237769164;241904678;237859821;242528514;237122122;239636164;242121952
|
||||||
|
244246464;245447266;242180766;241492514;250701691;244651755;241019412;239249581;246849680;240688086;241545728;243602899;245673075;242409522;241004252;250000705;251283526;240953703;239901151;241700620;254444249;239820604;240456214;244728765;244980255;242406075;248421134;238703646;242546960;241113695
|
||||||
|
250358853;252991295;256861241;250744845;249919436;248943874;250532741;246230322;250689958;246086071;249235011;246410173;252435282;246813098;252665671;251135157;245220042;246685780;250476161;246262445;249944184;245767229;253523994;247596415;249122452;247180455;268012546;252839168;250506951;247839560
|
||||||
|
258515678;255127351;258955696;254929936;257120708;255260410;251038578;251595313;260031844;250808930;254935016;251289568;259027632;255518956;252075913;246677056;256439341;249725069;252087416;257319427;259038108;258461814;254816898;263053978;260230594;256285701;250760969;251863198;261576438;255489159
|
||||||
|
259321952;263157220;272091170;260371930;259655502;261236025;263857305;262687715;259170527;258860603;264639611;265202478;256972983;257182030;263181238;256587892;258218211;261507725;270820172;260866925;257210917;258769045;261769726;261496413;253811309;270609021;260821256;256978755;258132254;260367212
|
||||||
|
269766659;276595133;264859481;262269320;273838428;264149377;263233691;263289309;265181649;266004584;268310019;273395936;272923906;262079551;267123386;263578424;265421077;263970278;263576039;264467026;266602721;262467839;261393944;267669901;269241426;264429344;269717555;268683909;267981609;266332845
|
||||||
|
269295882;269933656;270469120;269883778;269199344;267957123;249796162;267844783;269603533;268826979;272428882;275080932;268788032;268638531;274391609;276691945;273982291;269626067;266799235;268074241;269502226;266269533;277943886;275201319;273155099;267433111;273326603;268854473;270295282;273872838
|
||||||
|
274518336;276481394;288608270;272996229;281990727;274486455;273340120;271979287;279091163;281867607;271331644;272972824;279792281;279090092;273962884;272123177;283408151;275907086;270838692;248005141;282220165;270342455;275627731;274080193;283139528;270895374;277110943;276570359;278170059;272635617
|
||||||
|
51
thesis/src/performance/stat.csv
Normal file
51
thesis/src/performance/stat.csv
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
Cycles;Baseline Avg;Baseline SD;Intercept Avg;Intercept SD;Stderr Avg;Stderr SD;File Avg;File SD;Ok Avg;Ok SD;Return Avg;Return SD;PyOk Avg;PyOk SD;PyReturn Avg;PyReturn SD
|
||||||
|
100;394522;59714;10427113;462988;11575964;253473;11831990;348689;13076474;1162271;13177050;232828;17114683;255467;15571675;304178
|
||||||
|
200;684480;89390;10728908;272181;14325139;305707;13554674;460807;16456310;289818;16431464;328445;24131234;520354;21056080;487110
|
||||||
|
300;1004806;131581;10962041;312386;17027194;323923;15330088;441731;19882310;382739;19387692;1501689;31026008;469559;26380650;771419
|
||||||
|
400;1304127;83545;11372661;270890;19712621;347909;17249057;900721;23220259;603311;21422406;658317;38149373;939016;32128353;1107946
|
||||||
|
500;1592256;105898;11709378;273902;22697282;462435;18822538;574087;26851989;1010867;24460937;758839;45071880;1339034;37456301;1244316
|
||||||
|
600;1895442;130464;12047917;247568;25117703;456337;20575498;266024;29783448;831999;27577395;793483;52053112;1097029;42532242;1356564
|
||||||
|
700;2213827;104975;12361110;300385;27882492;634943;22382673;573662;32845440;559622;30507109;895084;59129922;1097927;47687095;863862
|
||||||
|
800;2628305;201520;12754461;245304;30815541;974036;24578416;1370113;36157934;750879;35652768;860188;65820532;998922;53092810;938485
|
||||||
|
900;2825817;162314;12993031;356629;33225179;414261;26037719;462749;39436945;796004;39342039;1201289;72232752;767761;58484564;1533793
|
||||||
|
1000;3108772;170260;13431961;307448;35931523;507563;27869838;962124;43469749;1907452;42401106;1213179;79670603;1840701;63659220;1148797
|
||||||
|
1100;3406111;146170;13777606;306016;38686328;485222;29861891;980317;45853904;1279935;44848600;1390247;86139757;621780;69738219;2240494
|
||||||
|
1200;3725777;156594;14126528;277721;41647628;705704;31178678;460041;49035716;695564;45621733;1325123;93095429;902275;74307838;1794152
|
||||||
|
1300;4087469;156785;14358058;280611;44086243;460197;32979343;423141;52497584;1632619;51856861;1275990;100191141;1814128;80135020;3262696
|
||||||
|
1400;4292505;167374;14846268;296761;46809938;541389;34869115;432616;56190011;1089663;55203609;914387;107766603;2362379;85479265;1389504
|
||||||
|
1500;4572214;225571;15114237;287681;49361025;279845;37212031;1781779;59116185;1689085;58285709;749010;113992447;1269982;90473175;1713998
|
||||||
|
1600;4923082;174615;15460129;327486;52305548;611924;38625303;1135684;62279307;1274413;61953282;1695522;121063828;2245106;96033275;2312777
|
||||||
|
1700;5166483;153378;15791758;298803;54938031;513068;40254955;949560;65382680;1506830;65115356;1331748;127720565;1626984;100748551;1649820
|
||||||
|
1800;5497751;209020;16085585;366356;58477674;1507994;41892868;498818;68688056;1504520;68228749;880714;134391688;1582336;107186154;1589397
|
||||||
|
1900;5805956;193667;16427008;257386;60505802;716086;43707906;813608;72153172;1749906;71204672;639830;141534098;1787621;111845567;1418496
|
||||||
|
2000;6059830;149468;16976318;415427;63510717;1323394;45371320;371778;75689663;1580709;74722980;979545;148737463;2653304;116676154;1474490
|
||||||
|
2100;6377742;190684;17196797;289761;66726951;1794964;47414718;1348167;78754328;1798845;77583191;1497809;155363324;2473707;122408936;1673891
|
||||||
|
2200;6623121;189853;17470183;303551;68567720;1023095;49269993;1644584;81715194;1847263;81630235;1266921;162580027;3575716;127848212;2435339
|
||||||
|
2300;6952906;176805;17876859;336883;69392158;10556124;50527003;363668;85161444;1925442;84283344;1124784;168991977;2334144;132760346;2491277
|
||||||
|
2400;7288966;221144;18215274;381104;73997790;1207150;53676400;2638128;88515266;1956049;87714794;1047669;176316871;2664706;138427180;3428852
|
||||||
|
2500;7687086;214686;18630693;393414;76931585;1135647;55006778;2629415;91372314;2103385;91015096;1907795;183353388;2070291;143987804;3191243
|
||||||
|
2600;7632633;363416;18909524;344719;79271877;687461;55975072;345029;94539841;1303073;94438459;1044190;189836061;2321304;149616169;3588693
|
||||||
|
2700;8174560;181199;19231438;387669;82347089;1557451;57872052;490032;97678038;1347481;97621552;1146042;197259039;2894388;153469866;2291787
|
||||||
|
2800;8447899;213732;19670216;328248;84893831;1408698;59542864;265835;101249601;1661554;100727209;1440325;203936177;3275245;159844758;2318524
|
||||||
|
2900;8804464;218130;19956270;431572;87686022;1182234;61601833;981957;104308050;1786214;103876640;1148094;210448418;3403192;165006808;2449638
|
||||||
|
3000;9010784;248166;20376781;336594;91068853;1782507;63178755;558420;106994264;1560907;106959716;1037735;216539614;2782129;170782294;2861060
|
||||||
|
3100;9331103;266569;20577490;278614;93221976;1568136;65392427;2128048;110128834;1347250;110771591;1790119;225322807;4036079;175905233;2913873
|
||||||
|
3200;9778768;280983;20965405;359323;95722907;1632923;67069912;1365944;114724502;2801907;114345455;1651313;230459357;2103196;180736097;1911002
|
||||||
|
3300;9909117;283939;21283196;422513;98212371;671946;68701884;1196483;116953218;1948013;116975388;1719466;237007031;1793911;186427075;3133767
|
||||||
|
3400;10253423;272824;21563196;476725;100947909;1262629;70202232;398452;121516666;2752272;116900460;18828606;243965577;1742249;190953641;3516285
|
||||||
|
3500;10549094;282951;22085786;363989;103828023;1230160;72095327;1412804;122976733;1810316;123544404;1617207;251422319;3911285;196557186;2842641
|
||||||
|
3600;10932319;280437;22273127;312981;106331558;513011;74155843;1156209;127525307;2349155;127181318;1985368;258570335;2400550;202445599;3652985
|
||||||
|
3700;11219472;293693;22752743;363381;109179786;1510549;75889598;1338718;130899357;2840471;130113483;2428192;264318118;5261600;207869651;2975572
|
||||||
|
3800;11514828;307166;22943067;418169;111560051;338207;77553942;1357759;133639518;2945802;134020974;2403253;271979896;3103527;213578445;3157841
|
||||||
|
3900;11824172;343282;23547573;417688;115156892;1981115;79134316;992767;136624026;1986892;136212234;920525;278799056;3039350;218077995;3368338
|
||||||
|
4000;12123878;296372;23814232;375398;117444661;1697465;80847115;834244;138963968;2892888;139715392;1778420;285639371;2351648;224054024;3285788
|
||||||
|
4100;12526596;347080;24076190;411786;120001747;1042786;83079117;1736204;143419406;2973443;142664064;2611749;292438496;5864424;228461888;2473895
|
||||||
|
4200;12715912;279629;24341732;416874;122699007;1258274;85512780;2631994;147069820;3579741;146571150;1463553;300491237;3464580;234442167;2762145
|
||||||
|
4300;13111242;258811;24656266;428479;125560493;1443093;85918169;297761;149378298;2451718;149485075;1587550;305708071;2985253;239783643;2561444
|
||||||
|
4400;13303073;325634;25067172;387431;127711585;372280;87929683;975369;152833570;2522128;153113653;1656150;313055332;6297144;243740800;3929135
|
||||||
|
4500;13697463;356756;25683108;375100;130526503;693141;89582972;505995;155724988;4075062;155227342;2044938;309578675;54625956;250101014;4378895
|
||||||
|
4600;13977464;344027;25925755;460848;133495971;1127336;91597602;1157872;158610112;3912888;158811576;1730808;326519995;6710607;255335223;3916086
|
||||||
|
4700;14213956;470038;25919071;354324;136075667;1366941;93461991;1220158;161771244;2003348;162846180;1940000;332985345;2558187;261185171;4275170
|
||||||
|
4800;14576705;375812;26600502;505971;139289408;1414807;94883034;524994;164754921;1944789;165493142;1553616;340248426;2999981;266618479;3845083
|
||||||
|
4900;14708572;286603;26813061;385730;142436712;2843052;96930580;1047072;168167032;1638428;169239730;1898011;347728876;4980985;270105550;4902415
|
||||||
|
5000;15199882;359091;27142509;386736;145702391;3939916;98716605;1358384;172570367;2825799;172350252;1561780;354276939;2652007;275452799;6886489
|
||||||
|
@@ -10,8 +10,8 @@
|
|||||||
\begin{filecontents*}[overwrite]{\jobname.xmpdata}
|
\begin{filecontents*}[overwrite]{\jobname.xmpdata}
|
||||||
\Author{\authorname} % The author's name in the document properties.
|
\Author{\authorname} % The author's name in the document properties.
|
||||||
\Title{Intercepting and Manipulating System/Function Calls in Linux Systems} % The document's title in the document properties.
|
\Title{Intercepting and Manipulating System/Function Calls in Linux Systems} % The document's title in the document properties.
|
||||||
\Language{de-AT} % The document's language in the document properties. Select 'en-US', 'en-GB', or 'de-AT'.
|
\Language{en-US} % The document's language in the document properties. Select 'en-US', 'en-GB', or 'de-AT'.
|
||||||
\Keywords{a\sep list\sep of\sep keywords} % The document's keywords in the document properties (separated by '\sep ').
|
\Keywords{system call\sep syscall\sep function call\sep intercept\sep hook} % The document's keywords in the document properties (separated by '\sep ').
|
||||||
\Publisher{TU Wien} % The document's publisher in the document properties.
|
\Publisher{TU Wien} % The document's publisher in the document properties.
|
||||||
\Subject{Thesis} % The document's subject in the document properties.
|
\Subject{Thesis} % The document's subject in the document properties.
|
||||||
\end{filecontents*}
|
\end{filecontents*}
|
||||||
@@ -41,6 +41,17 @@
|
|||||||
\usepackage{chngcntr}
|
\usepackage{chngcntr}
|
||||||
\counterwithin{listing}{chapter}
|
\counterwithin{listing}{chapter}
|
||||||
\usepackage{pgf-umlsd}
|
\usepackage{pgf-umlsd}
|
||||||
|
\usepackage{textcomp}
|
||||||
|
\usepackage{tikz}
|
||||||
|
\usepackage{csvsimple}
|
||||||
|
\usetikzlibrary{shapes}
|
||||||
|
\usetikzlibrary{intersections}
|
||||||
|
\usepackage{pgfplots}
|
||||||
|
\usepgfplotslibrary{fillbetween}
|
||||||
|
\usepgfplotslibrary{units}
|
||||||
|
\usepackage[flushleft]{threeparttable}
|
||||||
|
\usepackage{siunitx}
|
||||||
|
\usepackage{attachfile}
|
||||||
|
|
||||||
\newcommand{\newthreadShift}[4][gray!30]{
|
\newcommand{\newthreadShift}[4][gray!30]{
|
||||||
\newinst[#4]{#2}{#3}
|
\newinst[#4]{#2}{#3}
|
||||||
@@ -50,6 +61,8 @@
|
|||||||
\tikzstyle{instcolor#2}=[fill=#1]
|
\tikzstyle{instcolor#2}=[fill=#1]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
\tikzset{elips/.style={ellipse,draw,minimum width=2em,minimum height=1.8em,inner ysep=0pt},}
|
||||||
|
|
||||||
% Set PDF document properties
|
% Set PDF document properties
|
||||||
\hypersetup{
|
\hypersetup{
|
||||||
pdfpagelayout = TwoPageRight, % How the document is shown in PDF viewers (optional).
|
pdfpagelayout = TwoPageRight, % How the document is shown in PDF viewers (optional).
|
||||||
@@ -86,7 +99,7 @@
|
|||||||
|
|
||||||
% Required data.
|
% Required data.
|
||||||
\setregnumber{12119052}
|
\setregnumber{12119052}
|
||||||
\setdate{01}{06}{2025} % Set date with 3 arguments: {day}{month}{year}.
|
\setdate{04}{09}{2025} % Set date with 3 arguments: {day}{month}{year}.
|
||||||
\settitle{\thesistitle}{Abfangen und Manipulieren von\\System-/Funktionsaufrufen in\\Linux-Systemen} % Sets English and German version of the title (both can be English or German). If your title contains commas, enclose it with additional curvy brackets (i.e., {{your title}}) or define it as a macro as done with \thesistitle.
|
\settitle{\thesistitle}{Abfangen und Manipulieren von\\System-/Funktionsaufrufen in\\Linux-Systemen} % Sets English and German version of the title (both can be English or German). If your title contains commas, enclose it with additional curvy brackets (i.e., {{your title}}) or define it as a macro as done with \thesistitle.
|
||||||
%\setsubtitle{Optional Subtitle of the Thesis}{Optionaler Untertitel der Arbeit} % Sets English and German version of the subtitle (both can be English or German).
|
%\setsubtitle{Optional Subtitle of the Thesis}{Optionaler Untertitel der Arbeit} % Sets English and German version of the subtitle (both can be English or German).
|
||||||
|
|
||||||
@@ -145,17 +158,19 @@
|
|||||||
% Switch to arabic numbering and start the enumeration of chapters in the table of content.
|
% Switch to arabic numbering and start the enumeration of chapters in the table of content.
|
||||||
\mainmatter
|
\mainmatter
|
||||||
\input{src/01.introduction}
|
\input{src/01.introduction}
|
||||||
\input{src/02.intercept}
|
\input{src/02.related-work}
|
||||||
\input{src/03.manipulate}
|
\input{src/03.intercept}
|
||||||
\input{src/04.related-work}
|
\input{src/04.manipulate}
|
||||||
\input{src/05.conclusion}
|
\input{src/05.evaluation}
|
||||||
|
\input{src/06.conclusion}
|
||||||
\backmatter
|
\backmatter
|
||||||
|
|
||||||
% Declare the use of AI tools as mentioned in the statement of originality.
|
% Declare the use of AI tools as mentioned in the statement of originality.
|
||||||
% Use either the English aitools or the German kitools.
|
% Use either the English aitools or the German kitools.
|
||||||
\begin{aitools}
|
%\begin{aitools}
|
||||||
\todo{Enter your text here.}
|
% No generative AI tools were used in and for this work whatsoever.
|
||||||
\end{aitools}
|
% The only exception was the use of ChatGPT for proofreading and refining of the abstract.
|
||||||
|
%\end{aitools}
|
||||||
|
|
||||||
%\begin{kitools}
|
%\begin{kitools}
|
||||||
%\todo{Ihr Text hier.}
|
%\todo{Ihr Text hier.}
|
||||||
@@ -165,15 +180,15 @@
|
|||||||
\listoffigures % Starred version, i.e., \listoffigures*, removes the toc entry.
|
\listoffigures % Starred version, i.e., \listoffigures*, removes the toc entry.
|
||||||
|
|
||||||
% Use an optional list of tables.
|
% Use an optional list of tables.
|
||||||
\cleardoublepage % Start list of tables on the next empty right hand page.
|
%\cleardoublepage % Start list of tables on the next empty right hand page.
|
||||||
\listoftables % Starred version, i.e., \listoftables*, removes the toc entry.
|
\listoftables % Starred version, i.e., \listoftables*, removes the toc entry.
|
||||||
|
|
||||||
% Use an optional list of algorithms.
|
% Use an optional list of algorithms.
|
||||||
\listofalgorithms
|
%\listofalgorithms
|
||||||
\addcontentsline{toc}{chapter}{List of Algorithms}
|
%\addcontentsline{toc}{chapter}{List of Algorithms}
|
||||||
|
|
||||||
% Use an optional list of listings.
|
% Use an optional list of listings.
|
||||||
\cleardoublepage
|
%\cleardoublepage
|
||||||
\listof{listing}{\listoflistingscaption}
|
\listof{listing}{\listoflistingscaption}
|
||||||
\addcontentsline{toc}{chapter}{\listoflistingscaption}
|
\addcontentsline{toc}{chapter}{\listoflistingscaption}
|
||||||
|
|
||||||
|
|||||||
@@ -408,23 +408,18 @@
|
|||||||
oder dem Sinn nach entnommen sind, auf jeden Fall unter Angabe
|
oder dem Sinn nach entnommen sind, auf jeden Fall unter Angabe
|
||||||
der Quelle als Entlehnung kenntlich gemacht habe.}]{Statement}%
|
der Quelle als Entlehnung kenntlich gemacht habe.}]{Statement}%
|
||||||
\CreatePolylingual[
|
\CreatePolylingual[
|
||||||
english={I further declare that I have used generative AI tools only as an aid,
|
english={
|
||||||
and that my own intellectual and creative efforts predominate in this
|
I further declare that I have used generative AI tools only as an aid, and that my own intellectual and creative efforts predominate in this work.
|
||||||
work. In the appendix ``Overview of Generative AI Tools Used'' I have
|
%In the appendix ``Overview of Generative AI Tools Used'' I have listed all generative AI tools that were used in the creation of this work, and indicated where in the work they were used.
|
||||||
listed all generative AI tools that were used in the creation of this
|
%If whole passages of text were used without substantial changes, I have indicated the input (prompts) I formulated and the IT application used with its product name and version number/date.
|
||||||
work, and indicated where in the work they were used. If whole passages
|
The only use of a generative AI tool was ChatGPT, which was used for proof reading, for rephrasing single sentences and paragraphs, and to create the abstract.
|
||||||
of text were used without substantial changes, I have indicated the
|
},
|
||||||
input (prompts) I formulated and the IT application used with its
|
naustrian={
|
||||||
product name and version number/date.},
|
Ich erkl\"are weiters, dass ich mich generativer KI-Tools lediglich als Hilfsmittel bedient habe und in der vorliegenden Arbeit mein gestalterischer Einfluss \"uberwiegt.
|
||||||
naustrian={Ich erkl\"are weiters, dass ich mich generativer KI-Tools lediglich als
|
%Im Anhang \glqq\"Ubersicht verwendeter Hilfsmittel\grqq\ habe ich alle generativen KI-Tools gelistet, die verwendet wurden, und angegeben, wo und wie sie verwendet wurden.
|
||||||
Hilfsmittel bedient habe und in der vorliegenden Arbeit mein
|
%F\"ur Textpassagen, die ohne substantielle \"Anderungen \"ubernommen wurden, haben ich jeweils die von mir formulierten Eingaben (Prompts) und die verwendete IT-Anwendung mit ihrem Produktnamen und Versionsnummer/Datum angegeben.
|
||||||
gestalterischer Einfluss \"uberwiegt. Im Anhang \glqq\"Ubersicht verwendeter
|
Das einzige verwendete generative KI-Tool war ChatGPT, welches zum Korrekturlesen, bei der Umformulierung einzelner Sätze und Paragraphen, und zum Erstellen der Kurzfassung verwenet wurde.
|
||||||
Hilfsmittel\grqq\ habe ich alle generativen KI-Tools gelistet, die verwendet
|
}]{AIStatement}%
|
||||||
wurden, und angegeben, wo und wie sie verwendet wurden. F\"ur
|
|
||||||
Textpassagen, die ohne substantielle \"Anderungen \"ubernommen wurden, haben
|
|
||||||
ich jeweils die von mir formulierten Eingaben (Prompts) und die
|
|
||||||
verwendete IT-Anwendung mit ihrem Produktnamen und Versionsnummer/Datum
|
|
||||||
angegeben.}]{AIStatement}%
|
|
||||||
\CreatePolylingual[
|
\CreatePolylingual[
|
||||||
english=Overview of Gen. AI Tools Used,
|
english=Overview of Gen. AI Tools Used,
|
||||||
naustrian=Übersicht verwendeter Hilfsmittel]{AIToolsChapter}%
|
naustrian=Übersicht verwendeter Hilfsmittel]{AIToolsChapter}%
|
||||||
|
|||||||
Reference in New Issue
Block a user