Я внедряю системный вызов put (вывод строки на экран) в пользовательский проект ОС, над которым я работаю. Абсолютный адрес памяти строки дается мне переменной unsigned int
, представляющей регистр esi
, и мне нужно инициализировать указатель на массив unsigned char
для чтения строки из.
Содержимое регистров представлено:
struct regs
{
unsigned int gs, fs, es, ds;
unsigned int edi, esi, ebp, esp, ebx, edx, ecx, eax;
unsigned int int_no, err_code;
unsigned int eip, cs, eflags, useresp, ss;
};
Я пытался инициализировать указатель на адрес в esi
:
void fault_handler(struct regs *r) {
void *p = (void*)r->esi;
unsigned char* s = (unsigned char*)p;
// take s and print it to the screen
}
Но я не получаю "Hello \ n", который я должен получить, вместо этого я получаю мусор. Я проверил, что адрес esi
действительно указывает на правильную строку. У меня проблема с инициализацией указателя на этот адрес.
Спасибо!
Обновление: я закрою этот вопрос и перенесу обсуждение на новый вопрос, поскольку на исходный ответ дан ответ. Спасибо всем!