Selfpatch do not randomize fixed fields

This commit is contained in:
York Jasper Niebuhr 2025-10-27 14:52:24 +01:00
parent d762007a7e
commit 49ebe6ed8e
3 changed files with 13 additions and 2 deletions

View File

@ -1,4 +1,3 @@
#include <iostream> // TODO
#include <stage0.h> #include <stage0.h>
#include <functional> #include <functional>
#include <list> #include <list>

View File

@ -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

View File

@ -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;