У меня есть эта программа:
#include <stdio.h>
#include <stdlib.h>
typedef struct item {
int low; int high; char label[16];
} Item;
typedef struct item_coll {
size_t length; Item *items[];
} ItemColl;
extern int find_first_in_range(ItemColl *ic, int rlow, int rhigh);
/*
char *find_first_in_range(ItemColl *ic, int rlow, int rhigh) {
for (size_t i = 0; i < ic->length; i++)
if (ic->items[i]->low >= rlow && ic->items[i]->high <= rhigh)
return &ic->items[i]->label[0];
return NULL;
}
* */
int main() {
struct item fruits[] = {
{10, 20, "Apple"},
{12, 14, "Pear"},
{ 8, 12, "Banana"},
{ 2, 4, "Grape"},
{15, 35, "Watermelon"}
};
struct item_coll *basket = malloc (sizeof *basket + 5 * sizeof *basket->items);
basket->length = 5;
for (size_t i = 0; i < 5; i++)
basket->items[i] = &fruits[i];
int label = find_first_in_range (basket, 12, 15);
printf ("%d\n", label);
free (basket);
return 0;
}
Как получить доступ к различным полям в fruits
?Прямо сейчас я смог получить следующую информацию:
xor %r12, %r12
add $8, %r12
mov (%rdi, %r12), %rdi
mov (%rdi), %rax
ret
Это даст мне 10
из Apple
.
Если я не использую %r12
и просто загружаю значение %rdi
из памяти, я получаю 5
(длина basket
).
Если я добавлю 16
к %r12
, я получу 12
от Pear
.
- Если я добавлю
24
к %r12
Я получаю 8
от Banana
.
Как мне получить доступ, например, к 20
in Apple
?Разве мне не нужно просто добавлять 12
к %r12
?Это дает мне ошибку сегментации.