Updated the L4Sys experiment flow
git-svn-id: https://www4.informatik.uni-erlangen.de/i4svn/danceos/trunk/devel/fail@1726 8c4709b5-6ec9-48aa-a5cd-a96041d1645a
This commit is contained in:
@ -40,6 +40,22 @@ std::string L4SysCampaign::output_experiment(L4SysProtoMsg_ExperimentType res) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#undef OUTPUT_CASE
|
#undef OUTPUT_CASE
|
||||||
|
#define OUTPUT_CASE(OUTPUT) case L4SysProtoMsg::OUTPUT: return l4sys_output_register_strings[L4SysProtoMsg::OUTPUT];
|
||||||
|
std::string L4SysCampaign::output_register(L4SysProtoMsg_RegisterType res) {
|
||||||
|
switch (res) {
|
||||||
|
OUTPUT_CASE(EAX);
|
||||||
|
OUTPUT_CASE(ECX);
|
||||||
|
OUTPUT_CASE(EDX);
|
||||||
|
OUTPUT_CASE(EBX);
|
||||||
|
OUTPUT_CASE(ESP);
|
||||||
|
OUTPUT_CASE(EBP);
|
||||||
|
OUTPUT_CASE(ESI);
|
||||||
|
OUTPUT_CASE(EDI);
|
||||||
|
default:
|
||||||
|
return l4sys_output_register_strings[0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#undef OUTPUT_CASE
|
||||||
|
|
||||||
bool L4SysCampaign::run() {
|
bool L4SysCampaign::run() {
|
||||||
Logger log("L4SysCampaign");
|
Logger log("L4SysCampaign");
|
||||||
@ -61,23 +77,14 @@ bool L4SysCampaign::run() {
|
|||||||
|
|
||||||
int count = 0;
|
int count = 0;
|
||||||
srand(time(NULL));
|
srand(time(NULL));
|
||||||
|
|
||||||
for (int i = 0; i < 1000; ++i) {
|
for (int i = 0; i < 1000; ++i) {
|
||||||
L4SysExperimentData *d = new L4SysExperimentData;
|
|
||||||
d->msg.set_exp_type(d->msg.ALUINSTR);
|
|
||||||
// modify for a random instruction
|
|
||||||
int instr_offset = rand() % L4SYS_NUMINSTR;
|
|
||||||
d->msg.set_instr_offset(instr_offset);
|
|
||||||
// this value is not required for this experiment, so set it to an arbitrary value
|
|
||||||
d->msg.set_bit_offset(0);
|
|
||||||
|
|
||||||
campaignmanager.addParam(d);
|
|
||||||
++count;
|
|
||||||
}
|
|
||||||
#if 0
|
|
||||||
for (int i = 0; i < 25; ++i) {
|
|
||||||
L4SysExperimentData *d = new L4SysExperimentData;
|
L4SysExperimentData *d = new L4SysExperimentData;
|
||||||
d->msg.set_exp_type(d->msg.GPRFLIP);
|
d->msg.set_exp_type(d->msg.GPRFLIP);
|
||||||
d->msg.set_register_offset(d->msg.EBX);
|
// affect a random register
|
||||||
|
int reg_offset = rand() % 8 + 1;
|
||||||
|
d->msg.set_register_offset(
|
||||||
|
static_cast<L4SysProtoMsg_RegisterType>(reg_offset));
|
||||||
// modify for a random instruction
|
// modify for a random instruction
|
||||||
int instr_offset = rand() % L4SYS_NUMINSTR;
|
int instr_offset = rand() % L4SYS_NUMINSTR;
|
||||||
d->msg.set_instr_offset(instr_offset);
|
d->msg.set_instr_offset(instr_offset);
|
||||||
@ -90,7 +97,7 @@ bool L4SysCampaign::run() {
|
|||||||
}
|
}
|
||||||
for (int i = 0; i < 1000; ++i) {
|
for (int i = 0; i < 1000; ++i) {
|
||||||
L4SysExperimentData *d = new L4SysExperimentData;
|
L4SysExperimentData *d = new L4SysExperimentData;
|
||||||
d->msg.set_exp_type(d->msg.RATFLIP);
|
d->msg.set_exp_type(d->msg.ALUINSTR);
|
||||||
// modify for a random instruction
|
// modify for a random instruction
|
||||||
int instr_offset = rand() % L4SYS_NUMINSTR;
|
int instr_offset = rand() % L4SYS_NUMINSTR;
|
||||||
d->msg.set_instr_offset(instr_offset);
|
d->msg.set_instr_offset(instr_offset);
|
||||||
@ -113,7 +120,19 @@ bool L4SysCampaign::run() {
|
|||||||
campaignmanager.addParam(d);
|
campaignmanager.addParam(d);
|
||||||
++count;
|
++count;
|
||||||
}
|
}
|
||||||
#endif
|
for (int i = 0; i < 1000; ++i) {
|
||||||
|
L4SysExperimentData *d = new L4SysExperimentData;
|
||||||
|
d->msg.set_exp_type(d->msg.RATFLIP);
|
||||||
|
// modify for a random instruction
|
||||||
|
int instr_offset = rand() % L4SYS_NUMINSTR;
|
||||||
|
d->msg.set_instr_offset(instr_offset);
|
||||||
|
// this value is not required for this experiment, so set it to an arbitrary value
|
||||||
|
d->msg.set_bit_offset(0);
|
||||||
|
|
||||||
|
campaignmanager.addParam(d);
|
||||||
|
++count;
|
||||||
|
}
|
||||||
|
|
||||||
campaignmanager.noMoreParameters();
|
campaignmanager.noMoreParameters();
|
||||||
log << "done enqueueing parameter sets (" << count << ")." << endl;
|
log << "done enqueueing parameter sets (" << count << ")." << endl;
|
||||||
|
|
||||||
@ -128,7 +147,7 @@ bool L4SysCampaign::run() {
|
|||||||
|
|
||||||
results << output_experiment(res->msg.exp_type()) << "," << hex << res->msg.injection_ip() << dec << ",";
|
results << output_experiment(res->msg.exp_type()) << "," << hex << res->msg.injection_ip() << dec << ",";
|
||||||
if (res->msg.has_register_offset())
|
if (res->msg.has_register_offset())
|
||||||
results << res->msg.register_offset();
|
results << output_register(res->msg.register_offset());
|
||||||
else
|
else
|
||||||
results << "None";
|
results << "None";
|
||||||
results << "," << res->msg.instr_offset() << "," << res->msg.bit_offset()
|
results << "," << res->msg.instr_offset() << "," << res->msg.bit_offset()
|
||||||
|
|||||||
@ -17,6 +17,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
std::string output_result(L4SysProtoMsg_ResultType res);
|
std::string output_result(L4SysProtoMsg_ResultType res);
|
||||||
std::string output_experiment(L4SysProtoMsg_ExperimentType res);
|
std::string output_experiment(L4SysProtoMsg_ExperimentType res);
|
||||||
|
std::string output_register(L4SysProtoMsg_RegisterType res);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // __L4SYS_CAMPAIGN_HPP__
|
#endif // __L4SYS_CAMPAIGN_HPP__
|
||||||
|
|||||||
@ -8,8 +8,8 @@
|
|||||||
#define L4SYS_ADDRESS_SPACE 0x203d000
|
#define L4SYS_ADDRESS_SPACE 0x203d000
|
||||||
#define L4SYS_FUNC_ENTRY 0x10025ca
|
#define L4SYS_FUNC_ENTRY 0x10025ca
|
||||||
#define L4SYS_FUNC_EXIT 0x1002810
|
#define L4SYS_FUNC_EXIT 0x1002810
|
||||||
// kernel: 16300287, userland: 210785625
|
// kernel: 3597806, userland: 79484908
|
||||||
#define L4SYS_NUMINSTR 227085912
|
#define L4SYS_NUMINSTR 83082714
|
||||||
#define L4SYS_BOCHS_IPS 5000000
|
#define L4SYS_BOCHS_IPS 5000000
|
||||||
|
|
||||||
// several file names used
|
// several file names used
|
||||||
|
|||||||
Reference in New Issue
Block a user