Я работаю над практической задачей, поставленной для программирования на Си, и я столкнулся с этим вопросом.Я не совсем уверен, о чем спрашивает вопрос ... учитывая, что xDEADBEEF - это инструкция остановки, но где мы вводим deadbeef?почему ФП актуален в этом вопросе?спасибо!
Вы были назначены ведущим компьютерным инженером в межпланетном космическом полете на Юпитер.После нескольких месяцев в космосе главный компьютер корабля, HAL9000, начинает работать со сбоями и начинает убивать членов экипажа.Вы последний оставшийся в живых член экипажа, и вам нужно заставить компьютер HAL 9000 выполнить инструкцию 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).