2010-10-01 7 views
1

Я хочу переместить значение переменной «userstack» внутри регистра ESP, а затем выполнить абсолютный переход к адресу памяти, содержащемуся в переменной «location». Это то, что я получил:Основной вопрос сборки сборки GCC

// These are the two variables that contains memory addresses 
uint32_t location = current_running->LOCATION; 
uint32_t userstack = current_running->user_stack; 

// And then something like this 
__asm__ volatile ("movl userstack, %esp"); 
__asm__ volatile ("ljmp $0x0000, location"); 

Однако, когда я пытаюсь скомпилировать я получаю ошибки: «Ошибка: суффикс или операнды недопустимые для LJMP» и "неопределенная ссылка на` userstack ".

Любая помощь будет очень оценена.

ответ

1

Посмотрите на manual.

Я думаю, что вам нужно что-то вроде этого:

asm volatile ("movl %0, %esp" : "g" (userstack)); 
asm volatile ("ljmp $0x0000, %0" : "g" (location)); 

В основном НКУ потребности знать, что и где userstack и местоположение может быть (регистры, операнды памяти, плавающая, ограниченное подмножество регистров и т.д.) и который задается буквой «g», в данном случае означает общий операнд.

Смежные вопросы