gpt4 book ai didi

c++ - 将 AT&T 语法转换为 Intel 语法 (ASM)

转载 作者:搜寻专家 更新时间:2023-10-31 01:05:50 24 4
gpt4 key购买 nike

我一直在尝试访问可执行文件的 peb 信息,如下所示:Access x64 TEB C++ & Assembly

出于某种奇怪的原因,该代码仅适用于 AT&T 语法,但当我尝试使用 Intel 语法时,它无法给出相同的值。我这边当然有错误。所以我问..

如何转换:

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

有什么想法吗?

最佳答案

您忘记在最后一行反转操作数顺序。也就是说,由于 gs 段覆盖,您在 asm 中唯一需要的指令是第一条指令,其余指令可以在 C 中完成。

关于c++ - 将 AT&T 语法转换为 Intel 语法 (ASM),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21974224/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com