我的转换是正确的吗?
原始VS C++版本:
_TEB *pTeb = NULL;
_asm
{
mov eax, fs:[0x18];
mov pTeb, eax;
}我的尝试(GCC):
_TEB *pTeb = NULL;
asm ("movl %%fs:0x18, %%eax\n\t"
"movl %%eax, %0"
: "=rm" (pTeb) : : "%eax");发布于 2013-06-03 18:40:49
如果你需要为视窗相关的代码使用GCC语法,一个很好的来源是ReactOS源码。下面是他们的NtCurrentTeb()实现(去掉了不相关的部分):
unsigned long __readfsdword(const unsigned long Offset)
{
unsigned long value;
__asm__ __volatile__("movl %%fs:%a[Offset], %k[value]" : [value] "=r" (value) : [Offset] "ir" (Offset));
return value;
}
struct _TEB * NtCurrentTeb(VOID)
{
return (PTEB)__readfsdword(0x18);
}https://stackoverflow.com/questions/16874152
复制相似问题