我想在ESP寄存器中移动变量“userstack”的值,然后绝对跳转到变量“location”中包含的内存地址。 这就是我所拥有的:
// 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'”。
非常感谢任何帮助。
答案 0 :(得分:1)
查看manual。
我认为你需要这样的东西:
asm volatile ("movl %0, %esp" : "g" (userstack));
asm volatile ("ljmp $0x0000, %0" : "g" (location));
基本上GCC需要知道用户的位置和位置(寄存器,存储器操作数,浮点数,寄存器的受限子集等)以及由“g”指定的内容和位置,在这种情况下意味着一般操作数。