Я работаю над проблемой практики, установленной для программирования на языке C, и я столкнулся с этим вопросом. Я не совсем уверен, что задает вопрос ... учитывая, что xDEADBEEF является инструкцией halt, но где мы вводим deadbeef? почему FP имеет значение в этом вопросе? Спасибо!Перемещение рамки/счетчик программ/переполнение массива
Вы назначены ведущим компьютерным инженером в межпланетной космической миссии на Юпитер. Спустя несколько месяцев в космосе главный компьютер корабля HAL9000 начинает работать с ошибкой и начинает убивать членов экипажа. Вы последний член команды остался жив, и вам нужно обмануть компьютер HAL 9000 для выполнения инструкции HALT. Хорошей новостью является то, что вы знаете, что машинный код для инструкции halt (в шестнадцатеричном виде) xDEADBEEF (в десятичной форме - 559 038 737). Плохая новость заключается в том, что единственная программа, которую операционная система HAL 9000 готова фактически запустить, - это шахматы. К счастью, у нас есть подробный отпечаток исходного кода для шахматной программы (ниже приведена отрывок из всех важных частей). Обратите внимание, что функция getValues считывает набор ненулевых целых чисел и помещает каждое число последовательно в массив x. Первоначальный автор программы, очевидно, ожидал, что мы просто представим два положительных числа, однако в программе нет ничего, что помешало бы нам вводить три или более чисел. Мы также знаем, что стек будет использовать ячейки памяти между 8000 и 8999, а также о том, что начальное значение указателя кадра будет 8996.
void getValues(void) {
int x[2]; // array to hold input values
int k = 0;
int n;
n = readFromKeyboard(); // whatever you type on the keyboard is assigned to n
while (n != 0) {
x[k] = nextNumber;
k = k + 1;
n = readFromKeyboard();// whatever you type on the keyboard is assigned to n
}
/* the rest of this function is not relevant */
}
int main(void) {
int x;
getValues();
/* the rest of main is not relevant */
}
Какая последовательность чисел вы должны набрать на клавиатуре, чтобы заставить компьютер выполнить остановить инструкцию?
ОБРАЗЕЦ Решение
One of the first three numbers should be -559038737. The fourth number must be the address of where 0xdeadbeef was placed into memory. Typical values for the 4th number are 8992 (0xdeadbeef is the second number) or 8991 (0xdeadbeef is first number).
И что вы думаете об этом ответе? –
Я не знаю ... – user133466
Является ли это общим классом программирования C? –