Selfpatch do not randomize fixed fields
This commit is contained in:
parent
d762007a7e
commit
49ebe6ed8e
@ -1,4 +1,3 @@
|
|||||||
#include <iostream> // TODO
|
|
||||||
#include <stage0.h>
|
#include <stage0.h>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <list>
|
#include <list>
|
||||||
|
|||||||
@ -4,6 +4,8 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#define SPSLR_FLAG_FIELD_FIXED 1
|
||||||
|
|
||||||
enum SPSLR_OPCODE {
|
enum SPSLR_OPCODE {
|
||||||
SPSLR_TARGET, // uid, size, field count
|
SPSLR_TARGET, // uid, size, field count
|
||||||
SPSLR_FIELD, // offset, size, flags
|
SPSLR_FIELD, // offset, size, flags
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
#include "targets.h"
|
#include "targets.h"
|
||||||
|
#include "spslr_program.h"
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
@ -17,7 +18,7 @@ struct Field {
|
|||||||
|
|
||||||
uint32_t offset;
|
uint32_t offset;
|
||||||
uint32_t size;
|
uint32_t size;
|
||||||
uint32_t flags; // TODO -> fixed flag!
|
uint32_t flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct FinalField {
|
struct FinalField {
|
||||||
@ -177,6 +178,11 @@ static uint32_t target_get_shuffle_options(const struct Target* target, uint32_t
|
|||||||
if (f->offset >= option_would_end)
|
if (f->offset >= option_would_end)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
if (f->flags & SPSLR_FLAG_FIELD_FIXED) {
|
||||||
|
conflict = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
// Could field be placed in origin?
|
// Could field be placed in origin?
|
||||||
uint32_t falign = field_alignment(f);
|
uint32_t falign = field_alignment(f);
|
||||||
if (origin_region_ptr % falign != 0)
|
if (origin_region_ptr % falign != 0)
|
||||||
@ -248,6 +254,10 @@ static void target_shuffle_one(struct Target* target) {
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
uint32_t origin = rand_uint32() % target->field_count;
|
uint32_t origin = rand_uint32() % target->field_count;
|
||||||
|
|
||||||
|
if (target->fields[origin].flags & SPSLR_FLAG_FIELD_FIXED)
|
||||||
|
return;
|
||||||
|
|
||||||
uint32_t origin_alignment = field_alignment(&target->fields[origin]);
|
uint32_t origin_alignment = field_alignment(&target->fields[origin]);
|
||||||
|
|
||||||
uint32_t max_options = target->size / origin_alignment;
|
uint32_t max_options = target->size / origin_alignment;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user