2
我一直在试图访问一个可执行的PEB信息在这里看到:Access x64 TEB C++ & Assembly转换AT&T语法英特尔语法(ASM)
的代码只能在AT & T语法一些奇怪的原因,但是当我尝试使用英特尔语法,但未能赋予相同的值。我当然有一个错误。所以我问..
我怎么能转换:
int main()
{
void* ptr = 0; //0x7fff5c4ff3c0
asm volatile
(
"movq %%gs:0x30, %%rax\n\t"
"movq 0x60(%%rax), %%rax\n\t"
"movq 0x18(%%rax), %%rax\n\t"
"movq %%rax, %0\n"
: "=r" (ptr) ::
);
}
英特尔语法?
我想:
asm volatile
(
"movq rax, gs:[0x30]\n\t"
"movq rax, [rax + 0x60]\n\t"
"movq rax, [rax + 0x18]\n\t"
"movq rax, %0\n"
: "=r" (ptr) ::
);
和:
asm volatile
(
"mov rax, QWORD PTR gs:[0x30]\n\t"
"mov rax, QWORD PTR [rax + 0x60]\n\t"
"mov rax, QWORD PTR [rax + 0x18]\n\t"
"movq rax, %0\n" //mov rax, QWORD PTR [%0]\n
: "=r" (ptr) ::
);
他们不打印相同的值AT & T语法:0x7fff5c4ff3c0
任何想法?
这解决了它,但是,为什么只有第一条指令?我会将这个答案标记为当它让我。 – Brandon
@Cant因为剩下的指令只是执行指针算术和解引用。你不能在C中做什么。 – IInspectable
另外请注意,你忘记告诉编译器你有clobber'rax'。 – Jester