简短描述(32 位版本)
为什么这会引发不正确的操作数错误?
unsigned int GetPID() {
unsigned int id;
__asm {
mov id, fs:[0x20];
}
return id;
但不是这个?
unsigned int GetPID() {
unsigned int id;
__asm {
mov ebx, fs:[0x20];
mov id, ebx;
}
return id;
}
我不熟悉在 C 语言中使用汇编语言,我希望得到一些解释,说明我在使用它时是如何工作的。
注意。我知道使用这个函数来获取当前进程 ID 是不好的。这只是一个实验,我也在学习操作系统。
附带问题:将函数的一半写在汇编括号中可以吗?然后用C完成这个功能?或者每个函数应该全是 C 还是全是汇编?
最佳答案
Intel 程序集不支持从内存到内存的MOV
。 id
是一个内存位置。您只能从内存向寄存器移动,反之亦然。
就是说,检查一下 __readfsdword
编译器内在的。
关于c - 为什么我不能将FS寄存器的PID block 的值赋值给一个unsigned int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56043897/